Таким образом, в последней Visual Studio 2015 следующий код, кажется, больше не будет работать:Visual Studio 2015 с использованием лямбда в constexpr
template<class F>
struct wrapper
{
constexpr wrapper()
{}
};
template<typename T>
constexpr typename std::remove_reference<T>::type *addr(T&& t)
{
return &t;
}
template<class F>
constexpr wrapper<F> wrap(F*)
{
return wrapper<F>();
}
const constexpr auto add_one = wrap(true ? nullptr : addr([](int x)
{
return x + 1;
}));
отчетов Visual Studio назад illegal initialization of 'constexpr' entity with a non-constant expression
. Это использовалось для работы в кандидате на выпуск, но последняя сборка больше не работает (я использую версию 14.0.23107.0
). Это должно работать (оно работает как в clang, так и в gcc).
К сожалению, Microsoft не позволяет мне сообщать об ошибках. Так кто-нибудь знает об обходном пути?
Проблема не в том, что вы говорите. Изменить 'true? nullptr: addr (...) 'to' true? (void *) 0: addr (...) ', и он принимается, даже если он использует лямбда. (Я понимаю, что это препятствует тому, чтобы 'add_one' имел тип, который вы хотите, и я не предлагаю это как замену.) – hvd
Если вы хотите сообщить об ошибках, попробуйте http://connect.microsoft.com/VisualStudio (о хорошо сказано: «У вас нет прав на отправку отзывов для этого соединения».) –