Pytania otagowane jako language-lawyer

W przypadku pytań dotyczących zawiłości formalnych lub autorytatywnych specyfikacji języków programowania i środowisk.


1
Próbowanie zrozumienia szablonów i wyszukiwania nazw
Próbuję zrozumieć następujące fragmenty kodu Fragment nr 1 template <typename T> struct A { static constexpr int VB = T::VD; }; struct B : A<B> { }; Ani gcc9, ani clang9 nie generują tutaj błędu. P: Dlaczego ten kod się kompiluje? Czy nie A<B>dziedziczymy podczas dziedziczenia po B? W B …

1
Co oznacza „zdecydowanie wcześniej”?
Wyrażenie „zdecydowanie zdarza się wcześniej” jest używane kilkakrotnie w standardowym projekcie C ++. Na przykład: Zakończenie [basic.start.term] / 5 Jeśli zakończenie inicjalizacji obiektu o czasie przechowywania statycznym nastąpi zdecydowanie przed wywołaniem std :: atexit (patrz [support.start.term]), wywołanie funkcji przekazane do std :: atexit jest sekwencjonowany przed wywołaniem obiektu destruktora dla …

2
Konstruuj standardowe wyjątki za pomocą argumentu zerowego wskaźnika i niemożliwych warunków dodatkowych
Rozważ następujący program: #include<stdexcept> #include<iostream> int main() { try { throw std::range_error(nullptr); } catch(const std::range_error&) { std::cout << "Caught!\n"; } } GCC i Clang z wywołaniem libstdc ++ std::terminatei przerywają program z komunikatem terminate called after throwing an instance of 'std::logic_error' what(): basic_string::_S_construct null not valid Clang z libc ++ …

1
Czy to UB, aby wznowić coroutine funkcji składowej obiektu, którego żywotność się zakończyła?
To pytanie wynika z tego komentarza: Lambda dożywotniego wyjaśnienia dla korupcji w C ++ 20 w odniesieniu do tego przykładu: auto foo() -> folly::coro::Task<int> { auto task = []() -> folly::coro::Task<int> { co_return 1; }(); return task; } Pytanie brzmi więc, czy wykonanie zwróconej przez niego coroutine foospowoduje UB. „Wywołanie” …

1
Nieokreślone niejawne tworzenie obiektu
Ponieważ P0593 Domniemane tworzenie obiektów do manipulacji obiektami na niskim poziomie zostało zaakceptowane, obiekty mogą być teraz tworzone niejawnie w C ++ 20. W szczególności sformułowanie wprowadzone we wniosku pozwala niektórym operacjom (np. std::malloc) Automatycznie tworzyć i uruchamiać okres istnienia obiektów określonych typów, tak zwanych typów niejawnych , jeśli wprowadzenie …

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.