【问题标题】:What's the difference between these two typedefs?这两个 typedef 有什么区别?
【发布时间】:2012-06-27 19:02:13
【问题描述】:

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

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。

【问题讨论】:

  • 为什么人们坚持用c标签标记问题,而它显然不能是C代码,因为它使用模板之类的东西?
  • 我很确定没有区别。为什么你认为有一个?
  • @R.MartinhoFernandes,我很确定这是因为整个“C/C++”废话。
  • typedef A::c> C; - 这个提供编译器错误;类型定义 A C; - 这个没问题。
  • 这是一个内部编译器错误,它是编译器的一个错误,正如您在消息中所暗示的那样:请提交完整的错误报告,.. . 见gcc.gnu.org/bugs.html阅读错误信息是不是这么难?

标签: c++ android-ndk


【解决方案1】:

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

【讨论】:

  • 嗯,您实际上可以提交错误报告以增加错误被修复的机会,而不仅仅是希望得到最好的。你在这里创造自己的运气(或者至少你可以产生影响)
  • @DavidRodríguez-dribeas:很公平;也许我有点太愤世嫉俗了 ;-) 标准 NDK 编译器是当前 GCC 版本之后的一些次要版本,因此在这种情况下假设问​​题已经在主线中得到修复并且是只是在等待 Google 的合并和新版本。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2012-06-12
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-07
    • 2020-10-10
    相关资源
    最近更新 更多