首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模板部分专门化可以缩小C++中的参数类型吗?

模板部分专门化可以缩小C++中的参数类型吗?
EN

Stack Overflow用户
提问于 2022-01-15 09:56:09
回答 1查看 331关注 0票数 13

在下一个程序中,struct模板A<int>具有专门化的A<char>

代码语言:javascript
复制
template <int>
struct A { constexpr operator int() { return 1; } };

template <char c>
struct A<c> { constexpr operator int() { return 2; } };

int main() {
    static_assert( A<1000>{} == 1 ); //ok in Clang and GCC
    static_assert( A<1>{} == 2 ); //ok in Clang only
}
  • Clang接受整个节目。
  • GCC接受专业化的定义,但在A<1>{}中却忽略了这个定义。
  • MSVC抱怨这种专业化:
代码语言:javascript
复制
error C2753: 'A<c>': partial specialization cannot match argument list for primary template

演示:https://gcc.godbolt.org/z/Ef95jv5E5

哪个编译器就在这里?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-15 10:08:04

active CWG第1647期确切地提到了将int非类型模板参数专门化为char的情况。

它还提到,该标准目前缺乏处理主模板中的非类型模板参数与它们的部分专门化之间的类型不匹配的措辞,并且在这个问题上存在实现上的分歧。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70720403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档