This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 复合字面量无法隐式实例化模板类型

Guru**** 2341440 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1309894/compound-literals-fail-to-implicitly-instantiate-template-types

以下 使用复合字面量(GCC 语言扩展)的 C++代码无法编译:

模板< int n >
结构 Foo {};

void init_foo( foo<0>*p ){
  *p =(Foo<0>){};  //错误:不允许使用"Foo<0>"类型的复合文字

问题似乎是编译器 忽略了模板类型的隐式实例 化、因为如果在使用复合字面量之前已(显式或隐式)实例化类型 Foo<0>、则错误消失、例如这编译就行了:

模板< int n >
结构 Foo {};

foo<0> blah; // 隐式实例化 foo<0>

void init_foo( foo<0>*p ){
  *p =(Foo<0>){};

我已经测试了最新的 clpru (v2.3.3)以及我所躺的 cl7x (v3.1.0.LTS)、大概它适用于所有共享相同 C/C++前端代码的 TI 编译器。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您将此问题通知我们并提供一个简短的测试案例。  我能够重现相同的行为。  我提交了条目 EXT_EP-11623 对此进行调查。  我们欢迎您通过这个链接来了解这一点。

    谢谢。此致、

    -乔治