Re: Как написать Any с uniform initialization
От: sergii.p  
Дата: 28.11.19 09:38
Оценка:
Здравствуйте, Molchalnik, Вы писали:

эта стандартная проблема имеет стандартное решение

#include <iostream>
using namespace std;
struct Any {
  Any( ) {cout << "\ndefault";}
  template <typename Tn, typename = std::enable_if_t<!std::is_convertible<Tn, Any>::value>> Any( Tn && ) {cout << "\ntemplate";}
  Any( const Any & )  {cout << "\ncopy";}    
  Any( Any&& )  {cout << "\nmove";}
};

int main() {

  Any x0;
  Any x1( x0 );
  Any x2( std::move(x0) );
  Any x3( 3 );

  return 0;
}


проблема не в том, что заменяется конструктор копирования. Просто для неконстантного объекта лучшим соответствием считается шаблонный конструктор. Если в примере поставить Any const x0 то всё будет также работать — конструктор вызовется
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.