constexpr
начиная с 17го стандарта. В рамках этого стандарта ты можешь воспользоваться кодом Романа из комментария к вопросу. У неё тип что-то вроде класса с оператором ().
Ведь нужен ещё и объект для вызова метода.
да и что бы родственники и девушка понимала что не дурака валяю !
при помощи родительского метода ShowDebugInfo() мне нужно получить SpellInfo из Fireball
IMagicSpell
(I
- Интерфейс), но интерфейсом этот тип не является, т.к. содержит данные и невиртуальные методы.IMagicSpell::ShowDebugInfo
?Fireball::Fireball
?
prvalue
. При чем, этот объект вероятнее всего не будетconstexpr
.GCC уже долгое время не может справиться с задачей поддержки стандартов. Он просто не может работать с лямбдой даже через
constexpr void (*fun_ptr)() = [](){};
.Чтобы передать лямбду в параметр шаблона, тебе требуется сперва проксировать ее через
constexpr
объект.Посмотри пример. Вместо Clang ты можешь выбрать GCC и словить ошибку компиляции. При этом и MSVC++2019, и Clang 8 с задачей справляются.
При этом, справиться компиляторы могут и с такой конструкцией.