相关疑难解决方法(0)

具有聚合类型的自动模板推导 C++20

我对这段 C++ 代码感到困惑:

template <class T>
struct Foo {
  T value;
};
 
int main() {
    return Foo<int>(0).value;
    // Below code works as well in gcc
    // return Foo(0).value;
}
Run Code Online (Sandbox Code Playgroud)

它使用 C++20 标准中的 GCC 10(但不是 C++17 标准)和最新的 MSVC 进行编译,但不能使用 clang 13 或 14 进行编译,即使在 C++20 中也是如此。

根据标准(来自cppreferenceFoo ),至少在指定模板化类型时应该可以实例化。

为什么这与 C++20 有关?我在模板推导规范中没有看到任何变化(我可能错过了一些东西)。

另外(这很奇怪),当我们调用Foo而不指定模板类型(Foo(0))时,C++20 模式下的 GCC 甚至可以编译。

神电链接 在这里

c++ templates c++20 aggregate-type

11
推荐指数
1
解决办法
316
查看次数

标签 统计

aggregate-type ×1

c++ ×1

c++20 ×1

templates ×1