引数が特定の最初のテンプレート パラメーター (任意にテンプレート化された) を持つ特定のテンプレートである場合、計算を行う特定の関数が必要です。
これらのクラスを検討してください
template<class S> struct A { };
template<class S> struct B { };
template<class S> struct C { };
template<class S, class U = B<S>> struct D { };
を使用して目標を達成しようとしました
template<template<class ... X> class Y, class Z>
inline void foo(Y<A<Z>> const &av) { std::cout << "2\n"; }
問題: MSVS 2013 は を推測できませんY。
int main()
{
foo(C<A<int>>()); // prints 2 as intended
foo(D<A<int>>()); // does NOT compile in VS 2013
return 0;
}
エラーの理由 (MSVS による) は次のとおりです。
テンプレート - の引数はから
const Y<A<Z>> &推定できません。D<A<int>, B<S>>S=A<int>
私の目標は、特定の型を処理するオーバーロード / 特殊化を作成することですY。Y::value_type/ の最初のテンプレート パラメーターは、foo のシグネチャを保持するY任意の場所にすることができます。A<T>void foo (Y const &);
これは MSVS のバグですか (foo(D<A<int>>());実際には g++ を使用して 2 を出力するため)、何か不足していますか?
PS: 気になる方はメリークリスマス...