2

可変引数コンストラクターを明示的にインスタンス化しようとしています。すべての引数を出力するこの最小限の例では、GCC 5.3 を使用した 64 ビット Win 7 の MinGW-w64 で見られるのと同じエラーが発生します。

struct stf {
 template<typename... Args> stf(Args&&... args){
  using expand_type = int[];
  expand_type{(print(args), 0)... };
 }
};

//error on next line:
//template-id 'stf<char*, char*>' for 'stf::stf(char*, char*)'
//does not match any template declaration
template stf::stf<char*,char*>(char*,char*);
4

1 に答える 1

3

しばらくの間、パラメーター パックを無視しましょう。

template<typename Arg> stf(Arg &&args)

簡単なクイズ: どのインスタンス化が上記のテンプレートに一致するか。それは...ですか:

template<char *> stf(char *);

また

template<char *> stf(char *&&);

?

char *テンプレート タイプがテンプレートに表示されるすべての場所を置き換えると、明らかに 2 番目のバージョンが正しい答えになります。

したがって、正しいテンプレートのインスタンス化は次のようにする必要があります。

template stf::stf<char*,char*>(char* &&,char* &&);
于 2016-12-29T00:09:03.433 に答える