lundi 5 février 2018

Why are variadic templates different than non-variadic, for only one argument?

This code compiles just fine:

template <typename T1>
struct Struct {
};

struct ConvertsToStruct {
    operator Struct<int>() const;
};

template <typename T>
void NonVariadicFunc(Struct<T>);

int main() {
      NonVariadicFunc<int>(ConvertsToStruct{});
      return 0;
}

But an attempt to make it a little more generic, by using variadic templates, fails to compile:

template <typename T1>
struct Struct {
};

struct ConvertsToStruct {
    operator Struct<int>() const;
};

template <typename... T>
void VariadicFunc(Struct<T...>);

int main() {
      VariadicFunc<int>(ConvertsToStruct{});
      return 0;
}

What's going wrong? Why isn't my attempt to explicitly specify VariadicFunc's template type succeeding?

Godbolt link => https://godbolt.org/g/kq9d7L

Aucun commentaire:

Enregistrer un commentaire