another question을 이해하려고 시도하면서 다음 코드를 얻는 예제를 단순화했습니다.clang ++ 템플릿 기반 클래스에서 템플릿 메서드의 특수화에 대한 자동 반환 형식 오류가 있습니까?
template <bool>
struct foo
{
template <typename T>
auto bar (int i)
{ return i; }
};
template <>
template <typename T>
auto foo<true>::bar (int i)
{ return i; }
int main()
{
return 0;
}
g ++ 4.9.2 문제없이 컴파일하십시오. 그 소리 ++ 3.5은 다음과 같은 오류 int
와 두 auto
반환 값 중 하나를 대체
tmp_003-14,gcc,clang.cpp:12:20: error: out-of-line definition of 'bar' does not
match any declaration in 'foo<true>'
auto foo<true>::bar (int i)
^~~
주고, 변경은 없습니다 : g ++ 컴파일 및 그 소리 ++주고 오류가. 두 auto
을 int
으로 바꾸면 오류가 사라집니다. 누가 맞아 : 다음 코드는
template <bool>
struct foo
{
auto bar (int i)
{ return i; }
};
template <>
auto foo<true>::bar (int i)
{ return i; }
int main()
{
return 0;
}
내 질문은 분명하다 모두 컴파일러로 문제없이 컴파일하기 때문에
template <typename T>
부분은 중요하다?
g ++ 또는 clang ++?
g ++이 맞고 이것이 clang ++의 버그라고 생각하지만 확인을 요청합니다.
p.s .: 죄송합니다.
해보십시오 GCC 6.1 및 이것은 연타 문제였다 3.8 .. –
을 연타. 그것은 3.8에서 작동합니다 : https://godbolt.org/g/JkCJ6l – refi64