>
template<int a>
class A {};
operator A<0>::bool() {
    return true;
}
// Goal:
bool b1 = A<0>();   // Allow
//bool b2 = A<1>(); // Error

CLion은 두 번째 A 에서 "예상 유형"오류를 표시합니다 . GCC는 A<0> 에서 "예상 유형 지정자"오류를 표시합니다 . typename 와 유사한 오류가 발생합니다.   int 대신 사용됩니다 . 일부 템플릿 전문화에 대한 전환을 정의하는 이유와 방법은 무엇입니까?

버전 정보 :

C ++ 20, CLion 2019.1.4, CMake 3.14.3, GCC 8.3.0, 데비안 8.3.0-6

  • 답변 # 1

    해결책은 연산자 키워드를 이중 콜론 다음으로 이동하는 것입니다 : A<0>:: operator bool() , template<> 를 추가하십시오  정의하기 전에. 클래스는 일반 연산자 메소드로 선언해야합니다. Igor Tandetnik가 게시 한이 링크 덕분입니다.

관련 자료

  • 이전 c# - 특수 문자가 포함 된 Json을 사전으로 직렬화 해제
  • 다음 다른 파일에서 CSS 클래스를 사용하는 방법은 무엇입니까?