Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用decltype显式实例化函数:处理g++;但不是在visualc+上+;_C++_Templates_C++17_Template Instantiation - Fatal编程技术网

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;