VC ++ 2015 오류 : "내부 연결이있는 개체와 관련된 식은 형식이 아닌 인수로 사용할 수 없습니다."

올 루마 이드

다음 샘플 코드 는 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로 빌드합니다.

Rustyx

MSVC 2015는 C ++ 11을 완전히 지원하지 않으며 내부 연결이있는 비 형식 템플릿 인수는 버전 14.14 (VS 2017 15.8)까지 VC ++가 지원하지 않았던 C ++ 11 기능의 예입니다.

세 가지 해결책을 생각할 수 있습니다.

  • static const지정자를 제거하여 내부 링크와 함께 템플릿 인수를 사용하지 마십시오.char name[]
  • 컴파일러를 VC ++ 14.20+ (MSVC 2019)로 업그레이드
  • 기능 감지 및 / 또는 조건부 컴파일 사용

조건부 컴파일과 관련하여 다음과 같이 수행 할 수 있습니다.

#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] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관