2

为什么会出现下面的错误?

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

1 回答 1

5

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

于 2013-07-10T15:33:50.757 回答