Я почему-то совершенно забыл про Волдеморт-типы и их поддержку в C++, а пару дней назад очень хотелось чего-нибудь такого.
Волдеморт-типы прекрасная вещь, во-первых, потому что они так называются. А называются они так потому, что их
нельзя называть явно вне области их объявления.
Я так понимаю это
изобретение из языка D, но благодаря распространению auto
в C++14 это тоже реализуемо.
UPD. Я не написал
const в 16 строке, о ужас
Дальше начинается веселье, что чтобы получить вменяемую ошику копиляции нужно использовать SFINAE или контракты. Если мы хотим передавать результаты вызова таких "конструкторов" куда-то, но да можно.
Если наследовать такую структру от чего-то конктертного, то можно создать на куче и вернуть указатель этого конкретного типа. И использовать это все до С++11 - ну а так как Волдеморт вполне себе типичный злодей, то и методы у него должны быть как у всех злодеев :)
P.S.
Конкретно в данном примере имя структуре можно не давать в принципе (выкинуть слово Voldemort) - должно скомпилироваться и так :)
Создание таких структур довольно широко исопльзовалось в С++ для имитации поведения похожего на нынешние лямды и патерна визитор до C++11. Ну это то, что я встречал :)
ну в данном примере видно, что можификаци не производится, но возможно тебе захочется его модифицировать - так что норм :) Или без конст не ФП? :)
Кстати, часто используешь const * const в отношении указателей или вместо этого const & ?
Не забываешь ли делать аргументы функции констнтными, если они передаются по значению?
Но на ревью иногда смотрели странно на такие сигнатуры функций, я имею ввиду если аргументы передаваемые по значение указаны как константы :)