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

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

warning: multi-character character constant [-Wmultichar]

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

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

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

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

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

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

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

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

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

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

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