I will offer my two cents on the two topics under discussion.
Short summary (with more complete statements below): The Digital
Mars compiler has it right. Also, any given character constant
has the same value everywhere it occurs. Other interpretations
expressed in this thread in conflict with those statements are
wrong.
Elaboration I: DMC may conformingly reject a program containing a
multiple-character character constant, provided its documentation
defining the value of said character constant determines a value
for that constant that is not representable as an int (which the
implementation may do while still being conforming).
Elaboration II: within a particular implementation (including the
settings of any options that may affect the particulars of any
implementation-defined behavior), a given character constant will
always have the same value anywhere it is used, subject to the
condition that the documentation-determined value is one that is
representable as an int. (If the aforementioned value is not one
that is representable as an int, that is a constraint violation,
and all bets are off after that, except that a diagnostic must
be produced in such cases.)
Let's take the second topic first. First, in 6.4.4.4 p10, the
Standard says "The value of an integer character constant
containing more than one character [...]". Using the word "the"
implies a single value. Second, all of section 6.4 is about
"constants". Constants don't change. There is no sensible
understanding of the word "constant" where the value of a constant
can vary. (This may not apply to physical "constants", but those
are not constants in the same sense, just measured quantities that
seem not to change over time.) Third, the choice of value for any
given character constant is implementation defined (except we might
say the value of a single-byte character constant is implementation
determined, but we aren't talking about those here). When a choice
is simply implementation defined, the choice is meant to be single
valued for each case. For example, the representation of 'int' may
be ones' complement, two's complement, or sign and magnitude, but
that doesn't mean one 'int' can be represented one way and another
'int' be represented a different way; the same choice must apply
to both (and indeed all int objects). When the Standard wants to
allow variation from case to case, it uses different phrasing. For
example, how decimal floating point constants are rounded does not
have to be done consistently. Discussing how FP constants are
rounded, in 6.4.4.2 p3 the Standard says
[...] the result is either the nearest representable
value, or the larger or smaller representable value
immediately adjacent to the nearest representable
value, /chosen in an implementation-defined manner./
[my emphasis]
The phrase "implementation-defined manner" is used to indicate that
the choice may vary from circumstance to circumstance. The rule
for character constants doesn't say "implementation-defined manner"
but just "implementation-defined". Within a given implementation
the value of any particular character constant must be the same
everywhere.
Now for the first topic. The Standard talks about values for
character constants in 6.4.4.4 p{10,11}. Paragraph 11 gives rules
for wide character constants, which do not concern us here. About
character constants having more than one character, paragraph 10
says this:
An integer character constant has type int. [...] The value
of an integer character constant containing more than one
character (e.g., 'ab'), [...], is implementation-defined.
Note the wording used. The quoted text does not contain the
defined phrase "implementation-defined value". Rather it says
that the value of such constants is implementation-defined.
Although these two phrasings may sound similar, they are not
the same. Consider for example 6.2.5 p3, which says
An object declared as type char is large enough to store any
member of the basic execution character set. If a member of
the basic execution character set is stored in a char object,
its value is guaranteed to be nonnegative. If any other
character is stored in a char object, the resulting value is
implementation-defined but shall be within the range of
values that can be represented in that type.
Note the final sentence. If an implementation-defined value were
the same as a value that is implementation-defined, there would
be no need for the statement that the value must be within the
range of representable values for char. The value of a character
constant (having more than one character) thus may fall outside
the range of values for int. Note also the constraint given at
the start of the section on Constants, in 6.4.4 p2. It says:
Each constant shall have a type and the value of a constant
shall be in the range of representable values for its type.
Why does the constraint mention representable values? It isn't
needed for Integer Constants, which are always representable
unless they fall outside the range of all integer types, in which
case they don't have a type, per 6.4.4.1 p6. It isn't needed for
Floating Constants, which by construction always determine a
representable value. It isn't needed for Enumeration Constants,
which by 6.7.2.2 must have a value representable as an int. The
only reason this clause is there therefore must be for Character
Constants, which ergo must be able to have values outside of what
can be represented as an int.
Besides the above, the idea that all character constants must be
mapped to values that are in the range of what int can represent
doesn't pass the laugh test. Consider an implementation that
has 16-bit ints, and how it might define the value of different
character constants. Suppose it encounters a character constant
for a single universal character name, such as
'\U000FFFFF'
What purpose is served by insisting that all such character
constants be mapped to 16-bit value? It's absurd. Of course the
Standard could have included a clear and explicit statement that
mandates such an absurd behavior. But in this case is doesn't.
In the absence of a clear and explicit statement to the contrary,
the only sensible conclusion is that the Standard does not intend
absurd consequences, and that in this particular case character
constants may have values outside the range of what int can
represent, and which therefore under 6.4.4 p2 must result in a
diagnostic. Moreover, since a constraint has been violated, an
implementation is within its rights to reject the compilation.
For the sake of completeness, I ran tests using several versions
of GNU tools and clang tools, on two different sources:
int x = 'abcde';
and
int y = '\U000FFFFF';
In all cases, with all option settings, one or more diagnostics
were issued; in no case was a source accepted without producing
a diagnostic. In the case of the GNU tools, the diagnostics were
always warnings, even with -pedantic-errors. In the case of the
clang tools, using -pedantic-errors turned warnings into errors,
and clang++ gave errors in all cases. To me this says that all
of these compilers - DMC, gcc/g++, and clang/clang++ - all
support the idea that character constants may have values that
are not representable as int.
So fwiw there is my take on the question(s).