This is a defect in the standard wording. Copy elision cannot be guaranteed when initializing a base class subobject, because base classes can have different layout than the corresponding complete object type.
More Related Contents:
- Does returning a local variable return a copy and destroy the original(nrvo)?
- How does guaranteed copy elision work?
- What are the evaluation order guarantees introduced by C++17?
- How do inline variables work?
- How to enable C++17 compiling in Visual Studio?
- What are the new features in C++17?
- What is the purpose of std::launder?
- How to assert that a constexpr if else clause never happen?
- Understanding std::hardware_destructive_interference_size and std::hardware_constructive_interference_size
- What made i = i++ + 1; legal in C++17?
- Why does std::move prevent RVO (return value optimization)?
- constexpr static member before/after C++17
- Try to understand compiler error message: default member initializer required before the end of its enclosing class
- structured bindings: when something looks like a reference and behaves similarly to a reference, but it’s not a reference
- Why are by-value parameters excluded from NRVO?
- Deducing first template argument with other template parameters defaulted
- Why is there no support for concatenating std::string and std::string_view?
- Self-initialization of a static constexpr variable, is it well-formed?
- Static member access in constant expressions
- Pointer interconvertibility vs having the same address
- structured binding with [[maybe_unused]]
- Why does aggregate initialization not work anymore since C++20 if a constructor is explicitly defaulted or deleted?
- How similar are Boost.Filesystem and the C++ standard filesystem library?
- Deduction guides and variadic class templates with variadic template constructors – mismatched argument pack lengths
- How to enable /std:c++17 in VS2017 with CMake
- Undefined reference error for static constexpr member
- Convert std::variant to another std::variant with super-set of types
- Can I use the result of a C++17 captureless lambda constexpr conversion operator as a function pointer template non-type argument?
- Check if a type is passed in variadic template parameter pack
- Undefined reference error with new filesystem library and clang++7