2

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

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:内部编译器错误:in instantiate_decl,在 cp/pt.c:15628
请提交完整的错误报告,
并在适当的情况下提供预处理的源代码。
有关说明,请参见http://gcc.gnu.org/bugs.html

4

2 回答 2

6

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

于 2012-06-27T11:02:13.367 回答
2

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

由于这两种形式是等价的,因此您可以使用第二种形式来解决该错误。可能还值得尝试更新的编译器版本(如果有的话)来查看错误是否已修复。

于 2012-06-27T11:01:41.377 回答