I got strange error: expansion pattern '#'nontype_argument_pack' not supported by dump_expr# With the following code: http://coliru.stacked-crooked.com/a/bbacd7e9bec149f0 ------------------------------------------------------------------------------ #include <iostream> #include <utility> #include <type_traits> #include <typeinfo> using namespace std; struct Void{ static constexpr int size = 0; }; template<typename T0, typename T1> class Variadic{ private: typedef Variadic<T0, T1> thisT; public: /** Do not use this constructor */ Variadic(T0 el0, T1 el1): value(el0), next(el1) {} // avoiding decltype typedef T0 valueT; T0 value; typedef T1 nextT; T1 next; // may be next pair /** * Chainable method */ template<typename ValueT> /*constexpr*/ inline Variadic<ValueT, thisT> add(ValueT value){ return Variadic<ValueT, thisT>(value, (*this) ); } }; template<typename T> static inline Variadic<T, Void> make_variadic(T value){ return Variadic<T, Void>(value, Void()); } /// ERROR IS HERE! template<typename Arg0, typename... Args> static inline auto make_variadic(Arg0 value0, Args... values) -> decltype( fill(make_variadic<Arg0>(value0), values...) ) { return fill(make_variadic<Arg0>(value0), values...); } /// THIS ONE BELOW, WORKS FINE /* template<typename Arg0, typename... Args> static inline auto make_variadic(Arg0 value0, Args... values) -> decltype(fill(Variadic<Arg0, Void>(value0, Void()), values...)) { return fill(Variadic<Arg0, Void>(value0, Void()), values...); }*/ template<typename T, typename Arg0, typename... Args> static inline auto fill(T self, Arg0 value, Args... values) -> decltype(fill(self.add(value), values...)){ return fill(self.add(value), values...); } template<typename T, typename Arg0> static inline auto fill(T self, Arg0 value) -> decltype(self.add(value)){ return self.add(value); } int main() { auto list = make_variadic(1, 2, 3); } ------------------------------------------------------------------------------ Command line from coliru: g++-4.8 -std=c++11 -O2 -Wall -Wextra -pedantic -pthread -pedantic-errors main.cpp -lm && ./a.out Clang compile this without errors. If I replace make_variadic call (see code above) with function body, it works ok.
This may be related to this http://open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html#1433
resolved by mistake.
yes, this is a dup of PR 59481 which is a dup of PR 51501 *** This bug has been marked as a duplicate of bug 51501 ***