Сохранённый текст

Создать новый Скачать
#include<utility>                                                                                                                                                       
                                                                                                                                                                        
template <class _T>                                                                                                                                                     
struct B {                                                                                                                                                              
    _T a;                                                                                                                                                               
    _T b;                                                                                                                                                               
    B(std::initializer_list<_T>&& aa){auto i=aa.begin(); a=*i; i++; b=*i;}                                                                                              
};                                                                                                                                                                      
                                                                                                                                                                        
template <class _T>                                                                                                                                                     
void bar(const B<_T>& a) {}                                                                                                                                             
                                                                                                                                                                        
template <class _T>                                                                                                                                                     
struct A {                                                                                                                                                              
    template <class __T>                                                                                                                                                
    void foo(__T&& a) {                                                                                                                                                 
        bar(std::forward<__T>(a));                                                                                                                                      
    }                                                                                                                                                                   
                                                                                                                                                                        
    template <class __T>                                                                                                                                                
    void foo(std::initializer_list<__T>&& a) {                                                                                                                          
        bar(B<__T>(std::move(a)));                                                                                                                                      
    }                                                                                                                                                                   
                                                                                                                                                                        
};                                                                                                                                                                      
                                                                                                                                                                        
int main() {                                                                                                                                                            
    A<int> a;                                                                                                                                                           
    a.foo({1, 3});                                                                                                                                                      
}