これは、Visual Studio 2013 で処理できない C++ コードをいくつか提供した昨日の質問に続くもので、@galop1n がその場合に完全に機能する回避策を親切に提供してくれました。しかし、今は少し先に進んで、Visual Studio が再び私を苦しめています。
template <typename T>
using ValueType = typename T::value_type;
template<typename... Containers>
void
foo(const Containers &...args) {
std::tuple<ValueType<Containers>...> x;
}
template<typename... Containers>
struct Foo {
std::tuple<ValueType<Containers>...> x;
};
関数テンプレート foo またはクラス テンプレート Foo をインスタンス化しようとすると、次の 2 つのメッセージが表示されます。
Test.cpp(21): エラー C3546: '...': 展開できるパラメーター パックがありません
と
Test.cpp(21): エラー C3203: 'ValueType': 特殊化されていないエイリアス テンプレートは、テンプレート パラメーター '_Types' のテンプレート引数として使用できません。実際の型が必要です
それぞれの場合 (foo のインスタンス化または Foo のインスタンス化) で、両方のメッセージが「x」を定義する行を指しています。
更新: 私のMicrosoft バグ レポートには、(添付ファイルに) この問題のすべての基本的なバリアントが含まれています。そのため、修正を監視する場所になります。