簡體   English   中英

模板偏特化可以縮小 C++ 中的參數類型嗎?

[英]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
}
  • Clang 接受整個程序。
  • GCC 接受特化定義,但在A<1>{}中忽略它。
  • MSVC 抱怨這種專業化:
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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM