다음 샘플 코드 는 VC ++ 2019, clang ++ 및 g ++에서 컴파일되지만 VC ++ 2015에서는 컴파일되지 않습니다.
namespace ns
{
template<const char* str>
struct Foo
{
};
static const char name[] = "Test";
Foo<name> foo;
}
int main()
{
}
VC ++ 2015에 대한 해결 방법이 있습니까? 코드가 일치한다고 가정하고 있지만 VC ++ 2015에는 VC ++ 2019에서 수정 된 버그가 있습니다. VC ++ 2019로 마이그레이션 할 예정이지만 회사는 VC ++ 2015로 빌드합니다.
MSVC 2015는 C ++ 11을 완전히 지원하지 않으며 내부 연결이있는 비 형식 템플릿 인수는 버전 14.14 (VS 2017 15.8)까지 VC ++가 지원하지 않았던 C ++ 11 기능의 예입니다.
세 가지 해결책을 생각할 수 있습니다.
static const
지정자를 제거하여 내부 링크와 함께 템플릿 인수를 사용하지 마십시오.char name[]
조건부 컴파일과 관련하여 다음과 같이 수행 할 수 있습니다.
#if !defined(_MSC_VER) || _MSC_VER > 1914 // this part can be in a global config.h
# define INTERNAL static const
#else
# define INTERNAL
#endif
namespace ns
{
template<const char* str>
struct Foo
{};
INTERNAL char name[] = "Test";
Foo<name> foo;
}
int main()
{
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다