[C++11] Reclaiming fixed-point suffixes for user-defined literals.

Ed Smith-Rowland 3dw4rd@verizon.net
Sat Nov 5 17:29:00 GMT 2011


On 11/05/2011 08:36 AM, David Brown wrote:
> On 04/11/11 20:35, 3dw4rd@verizon.net wrote:
>> Greetings,
>>
>> Now that C++11 user-defined literals are in trunk I was thinking
>> about reclaiming some of the numeric suffixes that are currently
>> recognized by gcc in the preprocessor.  The C++11 spec stipulates
>> that any suffix that is recognized by the implementation is not
>> allowable as a user-defined literal suffix in c++.  This prevents C++
>> from hijacking 123LL, 1.234L, etc.  On the other hand, there are
>> several numeric literal suffixes that are recognized and used as gnu
>> extensions.
>>
>> One class of suffixes stands out in this connection: fixed-point
>> literals.  These end in 'k' or 'r' and can optionally be unsigned by
>> starting with 'u' and optionally have a size 'h', 'l', 'll'.  The
>> difference for these suffixes is that fixed-point literals are
>> explicitly rejected by the c++ front end.  Attempts to use such
>> literals: int i= 1.23k; results in 'error: fixed-point types not
>> supported in C++'.
>>
>> So I ask the question:  Should I make a simple change to libcpp to
>> allow fixed-point literal suffixes to pass to the user-defined
>> literal code in c++11 mode?
>>
>> Thanks,
>>
>> Ed Smith-Rowland
>>
>> P.S. There are other suffixes that might be reclaimed as well such as
>> 'i', 'I', 'j', 'J' for complex integral or floating point imaginary
>> numbers and others.  These might be more difficult or impossible to
>> reclaim for C++11 because these might be allowed and used in gnu-C++
>> and it might break existing code.
>>
>
> gcc has a tradition of allowing C-compatible features from C++ to be 
> supported in C, and useful features from C to be supported in C++. 
> Typically these being life as gcc extensions, but they sometimes move 
> into the standards (an easy example being gcc's support for C++ 
> comments in C from long before C99 came out).  An example is gcc's 
> support for C99-style "_Complex" floating point types in C++.
>
> Is there a good reason why the fixed point types (and decimal types, 
> and extended float types) are not supported in C++ as a gcc 
> extension?  It strikes me that from the users' viewpoint it would be 
> best for these features to be available in C++ as well.  If the actual 
> implementation of this would be difficult (I have no idea of the 
> effort involved here), then the next best thing is to reserve the 
> suffixes to avoid breaking things in the future, and to avoid user 
> confusion.
>
>
>
I think that fixed-point numbers would be an excellent addition to C++.  
The question is how to do it and what the semantics are.

On one hand we could probably let the C fixed-point types and keywords 
and literals work in C++. IIRC C fixed-point extensions are rather 
limited in terms of what sizes and precisions are allowed.

On the other hand, if we let C++ user-defined literals handle the 
literals then this opens the door to a pure library solution that would 
allow arbitrary size and precision and base for example.  I tend to 
think the C++ committee would be more in favor of this because they tend 
to push library changes over language enhancements for flexibility.  
This would likely be a template library of some kind.

Maybe there's a way to support both.  IIRC the template specializations 
for complex use the corresponding _Complex types under the hood.




More information about the Gcc mailing list