gpt4 book ai didi

c++ - 模板别名上下文中的模板<>模板<>语法是什么?

转载 作者:IT老高 更新时间:2023-10-28 22:21:33 25 4
gpt4 key购买 nike

(这个问题与模板模板参数无关。)

我刚刚发现GCC会编译这样的代码

template <typename A, typename B>
struct P {};

template <typename A>
template <typename B>
using Q = P<A, B>;

在哪里 Q是一个双模板名称。

但是我不能用这个。当我写 Q<short><long> ,我明白了

template_template.cpp:10:5: error: ‘Q<short int>’ is not a template
Q<short><long>{};
^~~~~~~~
template_template.cpp:10:20: error: invalid use of incomplete type ‘Q<short int>’
Q<short><long>{};
^
template_template.cpp:2:8: note: declaration of ‘Q<short int>’
struct P {};

为什么要编译第一个片段?

是否有语法可以让编译器相信 Q<short>实际上是一个模板?

//GCC 6.3.0

最佳答案

C++14 标准在 14p1 中说:

The declaration in a template-declaration shall
— declare or define a function, a class, or a variable, or
— define a member function, a member class, a member enumeration, or a static data member of a class template or of a class nested within a class template, or
— define a member template of a class or class template, or
— be an alias-declaration

这里 template-declaration 中的 declaration 不是上述的(它是另一个 template-declaration,它本身包含一个 < em>alias-declaration),因此代码无效。

语法的相关部分是:

template-declaration:
    template <template-parameter-list> declaration

alias-declaration:
    using identifier attribute-specifier-seqopt = type-id ;

declaration 可以是 template-declarationalias-declaration 或其他类型的声明。

请注意,语法本身接受给定的代码,但上面文本中的附加限制使其无效。

关于c++ - 模板别名上下文中的模板<>模板<>语法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46849440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com