Affected subclause: [lex.literal]
Change: Type of UTF-8 string and character literals
. Rationale: Required for new features
. The changed types enable function overloading, template specialization, and
type deduction to distinguish ordinary and UTF-8 string and character literals
. Effect on original feature: Valid C++ 2017 code that depends on
UTF-8 string literals having type “array of
const char” and
UTF-8 character literals having type “
char”
is not valid in this revision of C++
. For example:
const auto *u8s = u8"text";
const char *ps = u8s;
auto u8c = u8'c';
char *pc = &u8c;
std::string s = u8"text";
void f(const char *s);
f(u8"text");
template<typename> struct ct;
template<> struct ct<char> {
using type = char;
};
ct<decltype(u8'c')>::type x;