2

これは、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 バグ レポートには、(添付ファイルに) この問題のすべての基本的なバリアントが含まれています。そのため、修正を監視する場所になります。

4

1 に答える 1