Спінінг на заключне питання, "як я перетворять на тип Test::A", а не жорсткий щодо вимоги мати акторський склад там, і відповідати на кілька років із запізненням, просто це, здається, є популярним питанням, ніхто, схоже, не згадував альтернативу , за стандартом C ++ 11:
5.2.9 Статичний склад
... вираз eможе бути явно перетворений у тип з T
використанням static_castформи, static_cast<T>(e)якщо декларація
T t(e);добре сформована, для деякої винайденої тимчасової змінної t(8.5). Ефект такого явного перетворення такий же, як виконання декларації та ініціалізації, а потім використання тимчасової змінної як результат перетворення.
Тому безпосередньо використовувати форму t(e)також буде добре, і ви можете віддати перевагу їй за акуратність:
auto result = Test(a);