stdcxx-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Martin Sebor <>
Subject Re: tests/utilities/
Date Tue, 24 Jun 2008 15:09:59 GMT
Martin Sebor wrote:
> Travis Vitek wrote:
> IMO, the class should have an explicit requirement on the first
> template argument. If there isn't one I would propose adding
> paragraph 2 with the text:
>   -2- The template parameter T shall have an integral type (3.9.1).
>       integral_constant<T>::value shall be a integral constant
>       expression (5.19).
> With concepts, we would change the definition of the class like
> this (I think):
>    template <IntegralConstantExpressionType T, T v>

Actually, I don't think this is quite sufficient. T is more
constrained than that. If there were an OR in Concepts it
would be:

   template <IntegralConstantExpressionType T, T v>
   requires IntegralType<T> || EnumerationType<T>
   struct integral_constant;

I've written up an issue/proposal to fix this without using
concepts that I plan to send to the list shortly unless you
see a better way of dealing with it. Here's the proposal:

Add a new paragraph to [] with the following

   -2- The template parameter T shall have an integral type
       (3.9.1) or be an enumeration (3.9.2).
       integral_constant<T>::value shall be an integral
       constant expression (5.19).

In addition, declare the value data member of the template

     template <class T, T v>
     struct integral_constant {
         typedef T value_type;
         typedef integral_constant<value_type, v> type;
         static constexpr value_type value = v;

>    struct integral_constant {
>        // ...
>    };
> Strangely, this isn't in N2625:
> Incidentally, it also seems to me that value should be declared
> constexpr (both in our implementation and in the spec).
>> Travis

View raw message