W przypadku niepowodzenia zastępowania z użyciem aliasu szablonu (, np. alias szablonu na brakującym pliku nazwa_pliku, jak w poniższym fragmencie kodu), w przypadku wystąpienia błędu?aliasy szablonów i sfinae
Clang i gcc wydają się nie zgodzić na to:
// some types
struct bar { };
struct foo {
typedef void member_type;
};
// template alias
template<class T>
using member = typename T::member_type;
template<class T>
void baz(...) { }
// only works for gcc, clang fails with: no type named 'member_type'
// in 'bar'
template<class T>
void baz(member<T>*) { }
int main(int, char**) {
baz<bar>(0); // picks first
baz<foo>(0); // picks second
return 0;
}
Więc pytanie brzmi: kto jest poprawna i dlaczego?
Dzięki :-)
Co mówi 'clang -v'? Clang 3.3 trunk kompiluje kod dobrze. – Xeo
Wygląd strony Debian w wersji 3.1-8, wygląda na to, że muszę tylko poczekać. Dziekuję za odpowiedź ! – max
Czy możesz pozbyć się aliasu szablonu, aby uprościć trochę sprawy? – David