在下一個程式中,結構模板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
}
- Clang 接受整個程式。
- GCC 接受專業化定義,但在
A<1>{}. - MSVC 抱怨這種專業化:
error C2753: 'A<c>': partial specialization cannot match argument list for primary template
演示:https ://gcc.godbolt.org/z/Ef95jv5E5
哪個編譯器在這里?
uj5u.com熱心網友回復:
活躍的CWG 問題 1647正是提到了這種將int非型別模板引數特化為char.
它還提到該標準目前缺乏處理主要模板中的非型別模板引數及其部分專業化之間的型別不匹配的措辭,并且在該問題上存在實作分歧。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/415747.html
標籤:
