【问题标题】:C++ 20 template id issueC++ 20 模板 ID 问题
【发布时间】:2021-12-03 00:59:14
【问题描述】:

我的这段代码使用 std=c++17 编译得很好。

现在迁移到 c++20 之后。

我遇到了一个错误。

template<typename T>
struct S {
   S<T>(){};
};
error expected unqualified-id before ')' token line 3

由于它属于外部库,是否有在不修改代码的情况下避免此问题的解决方案?

PS:gcc 11.1 正在报告问题,但不是 clang !!!

https://godbolt.org/z/svqY77WTP

【问题讨论】:

  • &lt;T&gt; 中的 S&lt;T&gt; 对我来说似乎是多余的。即我通常希望看到S() {}。它真的有我在这里看不到的目的吗?
  • 10.3 compiles the code 这样您就可以对编译器进行降级。
  • 无法升级或降级。因为我依赖其他项目..
  • 这似乎是一个错误。
  • 关于您(现已删除)的问题:您在 Compiler Explorer 上的链接使用了 g++。因此,这可能是一个开始:GNU Assembler Examples。 (我正要发布此链接,因为您的问题消失了。)还有另一个:Linux Assembly HOWTO

标签: c++ gcc


【解决方案1】:

这可能不是 C++ 的问题,而是编译器的问题。 Gcc 8.3 版工作正常,如下所示。

$ cat test.cpp
#include <iostream>
template<typename T>
struct S {
   S<T>(){};
};

int main() {
   std::cout << "hello\n";
}
$ g++ -std=c++2a test.cpp
$ $ ./a.out 
hello
$ g++ -v 2>&1 | grep "gcc version"
gcc version 8.3.0 (Debian 8.3.0-6) 

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2017-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多