这两个typedef有什么区别?

时间:2012-06-27 10:44:17

标签: c++ android-ndk

下面代码中两条标记线之间有什么区别?

template <const char *N> struct A {
    static const char *p;
    };

template <class T> struct B {
    static const char c[1];
    typedef A<B<T>::c> C;   // <---
    // typedef A<c> C;      // <---
    };

我收到的错误是:

  

test_t.C:在'const char B :: c [1]'的实例化中:
  test_t.C:7:从这里实例化   test_t.C:7:内部编译器错误:在instantiate_decl中,在cp / pt.c:15628
  请提交完整的错误报告,
  如果合适,使用预处理来源   有关说明,请参阅http://gcc.gnu.org/bugs.html

2 个答案:

答案 0 :(得分:6)

“内部编译器错误”大致翻译为“您可能提供了破坏的代码,或者合理但令人困惑的代码。无论哪种方式,您都运气不好。请获取下一个版本版本和希望最好的。“

答案 1 :(得分:2)

您的编译器有错误,无法编译第一个表单。

由于这两个表单是等效的,因此您可以使用第二个表单解决错误。也许值得尝试更新的编译器版本(如果有的话)来查看错误是否已修复。