適切な構文が見つからないコードの一部を最小限の例に減らしました。
次の定義を仮定しましょう (「理由」について心配する必要はありません ;)
template <class>
class Element
{};
template <template <class> class>
class Client
{};
template <class>
struct TemplatedProvider
{
template <class T>
using element_template = Element<T>;
};
現在、C++11 以降では、クラス テンプレートまたは型エイリアス テンプレートのいずれかを使用して、テンプレートをインスタンス化できますClient
。次の関数は問題なくコンパイルされます。
void fun()
{
Client<Provider::element_template> client;
Client<TemplatedProvider<int>::element_template> clientBis;
}
しかし、次の場合、与えられたテンプレート引数Client
が従属名である場合、適切な構文を見つけることができません:
template <class T>
void templatedFun()
{
Client<TemplatedProvider<T>::element_template> client;
}
Clang (3.6 でテスト済み) は、次のコンパイル エラーを出力しています。
template argument for template template parameter must be a class template or type alias template
この構文を修正できますか?