https://gcc.gnu.org/bugzilla/show_bug.cgi?id=125569
Ke Gong <gongke at ios dot ac.cn> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |gongke at ios dot ac.cn
--- Comment #5 from Ke Gong <gongke at ios dot ac.cn> ---
I agree with @qurong.
Although the trait `std::is_literal_type` is gone in C++20, the concept of
"literal type" is still used, for example, for determining whether a type can
be used in a non-type template parameter.
Also note that the definition of "literal type" is different in C++20. As
[basic.types]/10 in N4659 (C++17) and N4861 (C++20), the destructor is required
to be *trivial* in C++17, but *constexpr* in C++20.
Look at this:
```cpp
struct NotLiteralCpp20 {
~NotLiteralCpp20() = delete;
};
template <NotLiteralCpp20 x>
struct Foo {};
```
This template parameter declaration should be ill-formed because
`NotLiteralCpp20` is not a literal type, but GCC accepts it.