为什么这个简单模板代码中的错误?

时间:2013-07-10 15:27:53

标签: c++ templates

为什么错误发生在下面?

#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;
}

1 个答案:

答案 0 :(得分:5)

static_assert时,foo还不是一个完整的类型(你仍在其定义范围内),所以当bar试图进入时,编译器给你一个错误。它给你带来的特殊错误很糟糕;尝试使用不同的编译器。