Код: Выделить всё
auto l = []{};
using F = decltype(+l); //pointer to function type
constexpr F p = l;
Код: Выделить всё
using L = decltype(l);
struct A : L {
//only required for MSVC:
constexpr operator F() { return static_cast(*this); }
};
constexpr F q = A{};
Код: Выделить всё
error C2440: 'initializing': cannot convert from 'A' to 'const F'
note: No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
Я подумал, что это каким-то образом связано с наличием в MSVC нескольких операторов преобразования для различных соглашений о вызовах, как описано здесь. Но созданный вручную класс с аналогичными преобразованиями допускает наследование операторов преобразования, онлайн-демо.
Почему тогда наследование не работает для типов замыканий, как ожидалось?
Подробнее здесь: https://stackoverflow.com/questions/798 ... on-pointer
Мобильная версия