[英]Can template partial specialization narrow the argument type in C++?
在下一個程序中,結構模板A<int>
有一個特化A<char>
:
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
}
A<1>{}
中忽略它。error C2753: 'A<c>': partial specialization cannot match argument list for primary template
演示: https://gcc.godbolt.org/z/Ef95jv5E5
哪個編譯器在這里?
活躍的CWG 問題 1647正是提到了這種將int
非類型模板參數特化為char
的情況。
它還提到該標准目前缺乏處理主要模板中的非類型模板參數及其部分專業化之間的類型不匹配的措辭,並且在該問題上存在實現分歧。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.