下面代码中两条标记线之间有什么区别?
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。
答案 0 :(得分:6)
“内部编译器错误”大致翻译为“您可能提供了破坏的代码,或者合理但令人困惑的代码。无论哪种方式,您都运气不好。请获取下一个版本版本和希望最好的。“
答案 1 :(得分:2)
您的编译器有错误,无法编译第一个表单。
由于这两个表单是等效的,因此您可以使用第二个表单解决错误。也许值得尝试更新的编译器版本(如果有的话)来查看错误是否已修复。