On 10/09/2018 08:05 PM, Chris Vine wrote:
> On Tue, 9 Oct 2018 12:32:39 -0700 (PDT)
>
james...@alumni.caltech.edu wrote:
>> On Tuesday, October 9, 2018 at 2:25:29 PM UTC-4, Chris Vine wrote:
>>> On Tue, 9 Oct 2018 09:36:43 -0700 (PDT)
>>>
james...@alumni.caltech.edu wrote:
>> ....
>>>> "... The standard and extended signed integer types are collectively
>>>> called signed integer types." (6.7.1p2)
>>>> "The standard and extended unsigned integer types are collectively
>>>> called unsigned integer types. ..." (6.7.1p3)
>>>> This is what tells you everything you need to know about what extended
>>>> integer types are, in order to cope with the possibility that your code
>>>> might use them indirectly, such as through a typedef or template
>>>> parameter. ... [snip]
>>>
>>> Of course it doesn't. Nor does the part of your posting concerning the
>>> fact that integer types have conversion ranks (which I have snipped for
>>> clarity's sake) lend anything at all to the point.
>>
>> You said that the definitions didn't explain the differences between
>> extended and standard integer types. I started out writing that they
>> fully explained the only difference between the two categories.
>
> I know that,
How in the world could you know what I started out writing? Unless you
have me under servelance, you only saw the version I posted after making
the changes I described later.
> ... you are restating yourself. I disagree.
No, I was not restating myself. I never published that version of the
statement, and I mentioned that version in this context only to explain
that I realized that that version would have been incorrect.
>>> The standard actually says very little about what integer types are,
>>> other than by specifying minimum ranges for them and requiring unsigned
>>> integers to implement a 2^n binary representation for overflow purposes,
>>> leaving the natural (implicit) meaning of "integer" and "integral" to
>>> carry the weight. It also says nothing about how, say, an "extended"
>>> signed integer differs from a "standard" signed integer, saying only
>>> that the extended signed integer type is implementation defined,
>>
>> Every statement the standard makes about signed integer types, integer
>> types, or arithmetic types, is a statement that constrains the
>> implementation of extended signed integer types
>
> I never said they didn't.
No, but your claim that the standard "says very little" about such
matters doesn't hold up when you consider everything it says in that
manner. We're talking about hundreds, possibly thousands of words of
relevant specification.
> - and there's a lot of
>> statements of that kind scattered through the standard, especially
>> section 7. For example, 7.6.9p2 implies that relational operators must
>> be supported for extended integer types. You've touched on only a small
>> fraction of all the things it says about such types.
>> The standard doesn't impose any other constraints on the implementation
>> of signed integer types.
>
> None of which are relevant to the issue which began this. I dealt with
> the (irrelevant) provisions of the standard which you had successively
> argued supported your assertions.
The provisions of the standard that you specify as being irrelevant are,
in fact irrelevant to your main point; but you haven't bothered
explaining or defending your main point, preferring argument by
assertion. As a result, very little of what I have said in response has
been addressed to your main point - most of it has involved correcting
misstatements on your part that you made while not addressing the main
point, such as claiming that the standard says little about extended
integer types, or implying that there was something unexplained about
the differences between extended and standard types.
> I am not going to deal with the
> irrelevant provisions you haven't previously argued do so. As an
> aside, the most essential property of a signed integer type, that
> within a given range it must be capable of holding whole numbers on the
> number line in an exact form, is to the best of my knowledge not
> explicitly stated in the standard. Nor need it be, as it is
> sufficiently implicit.
It's implied by what the standard says about how integer types may be
represented. The representation described can only represent integers,
and can represent every integer value between the smallest and largest
integer values that are representable by it.
>>> ... Consideration of what implication (if any) the word "extended"
>>> carries, which is an issue on which two reasonable people could differ,
>>> has been followed by your dogmatic insistence, by reference to portions
>>> of the standard that say nothing about the issue, that the standard
>>> demands that "extended" must have no meaning at all. I disagree on
>>> that.
>>
>> No, the word "extended" in "extended integer types" refers very
>> specifically to the fact that the types are defined by the
>> implementation as an extension to C++. A type with the same arithmetic properties and representation as
>> signed char, but with a different
>> conversion rank and without any corresponding operator overloads for
>> standard library functions that treat it as a character type, would be a
>> perfectly reasonable extension to C++ - I don't see how the concept of a
>> extension could be interpreted as prohibiting such a type.
>
> Conversion rank is a side issue: ...
Conversion rank is not an issue at all; as I said earlier, I mentioned
it only to make it easier to correctly word my assertion that the
standard does describe the main difference between those type
categories. Conversion rank is the other, much more minor difference,
and irrelevant to my arguments (except insofar as it complicated them by
requiring me to explain "main difference" versus "only difference".
> .... to say that any standard type can
> become an extended type because extended types have a different
> conversion rank from standard types of the same size is a circularity.
I'm not sure what that phrase means to you, but I am quite sure that
phrase does not describe any assertion that I made. I was not talking
about a standard type becoming an extended type. I was talking about a
standard type and an extended type having the same representation and
mathematical properties, just like the fact that, on many systems, "int"
and "long" have the same representation and mathematical properties,
despite being different an incompatible types. And mentioning conversion
rank was something I added only because the standard requires that the
members of any such pair of types must have different conversion rank -
that fact had no other role to play in my argument that such a pair
would be permitted (the pair would definitely not be permitted if it
violated that requirement).