繁体   English   中英

将模板模板参数与默认参数匹配

[英]Matching template template parameters with default arguments

这个问题与有关,必须与以下具体情况有关

template<class T, class U = T> class B { };
template <class ... Types> class C {  };
template<template<class> class P> class X { };

X<B>{ }; // OK
X<C>{ }; // OK

[temp.arg.template]/3的标准已将这两种情况标记为“ OK”,但缺陷CWG 150的最新更新表示CWG尚未决定采取行动。 clanggcc都不接受该代码。

clanggcc不一致吗?

从7.1开始,gcc接受此设置。 除非您提供新的标志,否则clang 故意不接受它:

尽管可以解决缺陷报告,但默认情况下,所有语言版本均禁用此功能,并且可以在Clang 4及更高版本中使用标志-frelaxed-template-template-args明确启用该功能。 对标准的更改缺少模板部分排序的相应更改,从而导致合理且先前有效的代码存在歧义错误。 预计此问题将很快得到纠正。

有关上述中断代码的示例,请参见此问题

编译演示


同样,有关核心问题的最新更新是:

[在2016年11月的会议上作为P0522R0号文件移交给DR。]

这只是问题的顶部,而不是底部。 我添加了链接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM