Пожалуйста, посмотрите на следующий код:
// header.h
#pragma once
template <typename T>
void test(T*);
// lib.cpp
#include "header.h"
template <>
void test(int* const)
{
}
// main.cpp
#include "header.h"
int main() {
int* ptr = nullptr;
test(ptr);
}
И g cc, и clang компилируют и связывают его без проблем, пока MSV C (2015, 2019 ) создает неразрешенный внешний символ «void __cdecl test (int *)»
, обратите внимание, что если ключевое слово const удалено из lib. cpp, то MSV C связывает код в порядке.
Who прямо здесь? Это ошибка MSV C?