Wiem, że to jak otwieranie pudełka Pandora, ale nie przeszkadza mi to. Rozważmy prosty przykład:Czy będę w stanie zadeklarować constexpr lambda w parametrze szablonu?
#include <type_traits>
template <auto>
struct Foo: std::false_type { };
template <>
struct Foo<[](){return 1;}()>:std::true_type { };
int main() {
static_assert(Foo<1>::value);
}
wiem lambda nie może być uznana wewnątrz unevaluated kontekście, ale oczywiście to nie jest w tym przypadku. Co jest jeszcze dziwniejszym clangiem 5.0.0 (co, jak sądzę, najpierw częściowo obsługuje constexpr lambda) does compile it.
Czy jest to błąd kompilatora, czy też C++ 17 na to pozwala?
Tak, myślałem, że standardowym zamiarem komisji było zaprezentowanie tego, dlatego zdziwiłem się, że Clang zrobił kompilator kodu. Poczekam trochę, a następnie zaakceptuję twoją odpowiedź. Dzięki! –
Każdy pomysł na: * dlaczego * zostało to nielegalne? Wydaje się bardzo przydatne, dzięki czemu programowanie meta łatwiejsze ... –
@ DanielJour Nie, przepraszam. Ale to spowodowałoby, że programowanie meta nawet * bardziej * mylące :) – Rakete1111