2012-06-27 118 views
2

以下代码中两条标记行之间有什么区别?我recived这两个typedefs有什么区别?

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: In instantiation of 'const char B::c [1]':
test_t.C:7: instantiated from here
test_t.C:7: internal compiler error: in instantiate_decl, at cp/pt.c:15628
Please submit a full bug report,
with preprocessed source if appropriate.
See http://gcc.gnu.org/bugs.html for instructions.

+14

为什么人们坚持用[tag:c]标记标记问题,当它明显不能是C代码时,因为它使用了模板之类的东西? –

+5

我相当确定没有区别。你为什么认为有一个? –

+1

@ R.MartinhoFernandes,我敢肯定这是因为整个“C/C++”废话。 – Griwes

回答

6

“内部编译器错误”大致可以翻译为“你可能已经提供了断码,或合理的,但令人困惑的代码。无论哪种方式,你的运气了。请把最好的下一个发行版本和希望“。

+0

那么,你实际上可以提交一个错误报告来增加错误被修复的机会,而不仅仅是希望获得最好的*。你在这里(或至少你可以有一个效果)你自己的运气 –

+0

@DavidRodríguez-dribeas:够公平的;也许我太过于愤世嫉俗了;-)标准NDK编译器是当前GCC版本背后的一些次要版本,因此在这种情况下假设问​​题已经在主线中得到修复并且是只是等待Google的合并和新版本。 – Rook

2

你的编译器有一个bug,并且无法编译第一种形式。

由于这两种形式是等价的,所以可以使用第二种形式解决该bug。也许值得尝试一下更新的编译器版本(如果有的话)来查看bug是否已经修复。