Является ли '\ u0B95' литералом из нескольких символов?

Впредыдущий ответ я далЯ ответил на следующее предупреждение, вызванное тем, что'\u0B95' требует три байта и поэтомумногозначный литерал:

warning: multi-character character constant [-Wmultichar]

Но на самом деле я нене думаю, что яя прав, а я нетЯ думаю, что gcc тоже. Стандарт гласит:

Обычный символьный литерал, содержащий более одногос-символ этомногозначный буквальный.

Одно производственное правило дляс-символ этоуниверсальный характер имя (Т.е.\uXXXX или же\UXXXXXXXX). поскольку\u0B95 это одинс-символэто не мультихарактерный литерал. Но теперь это становится грязным. Стандарт также гласит:

Обычный символьный литерал, который содержит одинс-символ имеет типcharсо значением, равным числовому значению кодированияс-символ в наборе символов выполнения.

Так что мой литерал имеет типchar и значение символа в наборе символов выполнения (или значение, определенное реализацией, если оно не существует в этом наборе).char определяется как достаточно большой для хранения любого члена базового набора символов (который на самом деле не определен стандартом, но я предполагаю, что это означает базовый набор символов выполнения):

Объекты, объявленные как символы (char), должны быть достаточно большими, чтобы хранить любого члена реализациибазовый набор символов.

Следовательно, поскольку набор символов выполнения является надмножеством всех значенийchar может держать, мой персонаж может не вписаться в.char

Так какая ценностьделает мойchar иметь? Это неКажется, это нигде не определено. Стандарт говорит, что дляchar16_t литералы, если значение не представимо, программа некорректна. Это ничего не говорит об обычных литералах, хотя.

И что'происходит? Это просто беспорядок в стандарте или я что-то упустил?

Ответы на вопрос(4)

Ваш ответ на вопрос