为什么在这个简单的模板代码中出现错误

Why the error in this simple template code?

本文关键字:代码 错误 简单 为什么      更新时间:2023-10-16

为什么会出现以下错误?

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

static_assert的点上,foo还不是一个完整的类型(您仍然在它的定义中),所以当bar试图访问时,编译器会给您一个错误。它给你的特别错误很糟糕;请使用其他编译器进行尝试。