部分的なクラス テンプレート引数の演繹が依然として機能しないのはなぜですか?

DDD
リリース: 2024-11-09 02:12:01
オリジナル
1030 人が閲覧しました

Why is Partial Class Template Argument Deduction Still Unworkable?

部分的なクラス テンプレート引数の推論がとらえどころのない理由

動作を調整するという P0091: クラス テンプレートのテンプレート引数の推論 提案の意図にもかかわらず関数テンプレートとクラス テンプレートを使用する場合、クラス テンプレートの部分推論は依然として機能しません。

クラス テンプレートを考慮してください:

template <std::size_t S, typename T>
struct test
{
    static constexpr auto size = S;
    using type_t = T;

    test(type_t (&amp;input)[size]) : data(input) {}
    type_t (&amp;data)[size]{};
};
ログイン後にコピー

使いやすさのためにヘルパー関数を使用する場合:

template <std::size_t S, typename T>
test<S, T> helper(T (&amp;input)[S]) { return input; }
ログイン後にコピー

次のようなコード:

int buffer[5];

auto a = helper<5, int>(buffer); // No deduction
auto b = helper<5>(buffer);      // Type deduced: FAILS
auto c = helper(buffer);         // Type and size deduced
ログイン後にコピー

は正常にコンパイルされます。ただし、より最近のコンパイラ バージョンでは、部分的な推論 (つまり、auto b = helper(buffer);) が失敗し、部分的なクラス テンプレート引数の推論が実際にはサポートされていないことが示唆されます。

この制限は懸念から生じています。次のような場合の潜在的な混乱に関して提起されました。

// Deduced as tuple<int, string, float>
// but tuple<int> is also a valid type!
tuple<int> t(42, "waldo", 2.0f);
ログイン後にコピー

したがって、この提案は当初推論動作を統一することを目的としていましたが、潜在的な曖昧さの問題により、クラス テンプレートの部分的な推論は依然として実行不可能です。

以上が部分的なクラス テンプレート引数の演繹が依然として機能しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート