RabraBabr, Если вы не хотите никакой автоматизации для кода «потому-что-надо» (или boilerplate-кода, как его ещё называют — введение в строй парового котла было связано с кучей формальностей: кто сделал, кто допустил…), то это смотрится так.
Pavel K, Покажите код. Decltype(*this) — это тот класс и те cv-квалификаторы, для которых определена конкретная функция. Например, в функции Xxx::foo() const это будет const Xxx.
Евгений Шатунов, Нет второй части мерлезонского балета — виртуального клонирования. Если у нас есть u_p<BaseClass>, хранящий MyClass, оно же должно получиться в результате.
Владислав Спасский, scanf_s("%s", f, 80);
Не работал никогда со scanf_s, т.к. в GNU долго не было. Вот так — все массивы в Си передаются куда бы то ни было как указатели, и для %c и %s scanf_s требует длину.
Нужно допускать только программу, независимо от того, какой пользователь её запустил.
Мы защищаемся не от пронырливых пользователей, а от вредоносного софта! — а у него те же права доступа, что и у юзверя.
А всё остальное — это уже попытка свести «потому-что-надо» к одной простой строчке.