C++ 使用decltype显式实例化函数:处理g++;但不是在visualc+上+;
这是代码,但是C++ 使用decltype显式实例化函数:处理g++;但不是在visualc+上+;,c++,templates,c++17,template-instantiation,C++,Templates,C++17,Template Instantiation,这是代码,但是 #包括 模板void foo(T&T,int一些_参数){} 模板decltype(foo)foo; int main(){ std::cout我认为msvc是错误的。简而言之,显式实例化只是一个模板,然后是典型的声明 如果你遵守语法 我不相信有解决方法。显然,msvc将decltype视为类型别名,并拒绝任何带有别名签名的“感知”定义。这些定义也被拒绝 using F = decltype(foo<int>); template F foo; extern temp
#包括
模板void foo(T&T,int一些_参数){}
模板decltype(foo)foo;
int main(){
std::cout我认为msvc是错误的。简而言之,显式实例化只是一个模板
,然后是典型的声明
如果你遵守语法
我不相信有解决方法。显然,msvc将decltype
视为类型别名,并拒绝任何带有别名签名的“感知”定义。这些定义也被拒绝
using F = decltype(foo<int>);
template F foo;
extern template F foo; // not even a definition
使用F=decltype(foo);
模板F foo;
外部模板F foo;//甚至不是定义
但它接受这些
F bar;
decltype(foo<int>) baz;
F条;
decltype(foo)baz;
它不能那样工作-如果你有多个foo会发生什么?@Bernd编译错误?假设我只关心宇宙中只有一个foo
。template decltype(foo)foo;
?更方便的链接:为什么decltype(foo)foo;
前面有template
?
explicit-instantiation:
template declaration
declaration:
block-declaration
block-declaration:
simple-declaration
simple-declaration:
decl-specifier-seq init-declarator-list;
decl-specifier-seq:
decl-specifier
decl-specifier:
defining-type-specifier
defining-type-specifier:
simple-type-specifier
simple-type-specifier:
decltype-specifier
decltype-specifier:
decltype ( expression )
using F = decltype(foo<int>);
template F foo;
extern template F foo; // not even a definition
F bar;
decltype(foo<int>) baz;