如果替换失败涉及模板别名(,例如缺少成员类型名称上的模板别名,如下面的代码段中所示),是否应该触发错误?模板别名和sfinae
锵和gcc似乎对此意见不一:
// 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;
}
所以现在的问题是:谁是正确的,为什么?
感谢:-)
'clang -v'说什么?铿锵3.3主干编译代码就好了。 – Xeo
Debian clang版本3.1-8在这里,看起来像我只需要等待。感谢您的反馈意见 ! – max
你可以摆脱模板别名,只是为了简化一点点 – David