引数が特定の最初のテンプレート パラメーター (任意にテンプレート化された) を持つ特定のテンプレートである場合、計算を行う特定の関数が必要です。
これらのクラスを検討してください
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: 気になる方はメリークリスマス...