Nel seguente codice, ho pensato che l'asserzione non dovrebbe sparare ma lo fa.nocept di una funzione che restituisce una classe che ha distruttore di lancio
struct A
{
~A() noexcept(false);
};
A f() noexcept;
int main()
{
static_assert(noexcept(f()), "f must be noexcept");
}
La funzione f()
è noexcept ovviamente, ma noexcept(f())
viene valutata false. (in entrambi gcc e clang)
Mi manca qualcosa o è un bug?
è questo in un progetto C++ 17? Non riesco a trovare il tuo passge nello standard C++ 14. – Simple
@Simple: Sì, è dalla testa. Bella domanda, non so quando quest'ultimo è cambiato. –
@Simple: Sembra che la formulazione sia stata aggiunta come parte della risoluzione di [CWG 1992] (http://wg21.link/cwg1992), che è stata accettata come Rapporto sui difetti durante la riunione di febbraio 2016. Essendo un difetto significa che il problema potrebbe essere risolto retroattivamente per tutte le revisioni precedenti, tuttavia, dal momento che cattura essenzialmente ciò che * dovrebbe * essere sempre stato inteso. –