#include template struct B { _T a; _T b; B(std::initializer_list<_T>&& aa){auto i=aa.begin(); a=*i; i++; b=*i;} }; template void bar(const B<_T>& a) {} template struct A { template void foo(__T&& a) { bar(std::forward<__T>(a)); } template void foo(std::initializer_list<__T>&& a) { bar(B<__T>(std::move(a))); } }; int main() { A a; a.foo({1, 3}); }