为什么错误发生在下面?
#include <type_traits>
template<typename FooType>
struct bar {
using bar_type = typename FooType::foo_type;
};
template<typename T>
struct foo {
using foo_type = T;
//Error: No type named 'bar_type' in 'bar<foo<int> >'
static_assert(std::is_same<foo_type,typename bar<foo<T>>::bar_type>::value,"");
};
int main(int argc, char **argv)
{
bar<foo<int>> b;
return 0;
}
答案 0 :(得分:5)
在static_assert
时,foo
还不是一个完整的类型(你仍在其定义范围内),所以当bar
试图进入时,编译器给你一个错误。它给你带来的特殊错误很糟糕;尝试使用不同的编译器。