[cfe-dev] dependent name related question

Richard Smith richard at metafoo.co.uk
Fri Mar 6 18:26:14 PST 2015


On Fri, Mar 6, 2015 at 12:55 AM, guoqing zhang <gqzhang81 at gmail.com> wrote:

> Hi Richard,
>
> So X is a dependent type  ? which of the following categories X belongs to
> ?
>

It's not listed here due to a bug in the standard, currently under
discussion by the C++ committee (see the [*] in my previous email).


>
>    - template parameter
>    - a member of an *unknown specialization* (see below)
>    - a nested class/enum that is a dependent member of *unknown
>    specialization* (see below)
>    - a cv-qualified version of a dependent type
>    - a compound type constructed from a dependent type
>    - an array type constructed from a dependent type, or whose size is a
>    value-dependent constant expression (see below)
>    - a template-id where either the template name is a template
>    parameter, or any of template arguments is type- or value-dependent
>    - the result of decltype
>    <http://en.cppreference.com/w/cpp/language/decltype> applied to a
>    type-dependent expression
>
> (copied from cppreference.com)
>
> Regards
> -guoqing
>
>
> On Thu, Mar 5, 2015 at 12:12 AM, Richard Smith <richard at metafoo.co.uk>
> wrote:
>
>> On Wed, Mar 4, 2015 at 12:26 PM, guoqing zhang <gqzhang81 at gmail.com>
>> wrote:
>>
>>> Hi ,
>>>
>>> Can somebody explain why I need "typename" before Y<alignof(X)>::type
>>>  in the following piece of code ?
>>>
>>> template<int N> struct Y { typedef int type; };
>>>
>>> template<int N> void h() {
>>>       struct  X {};
>>>       typename Y<alignof(X)>::type z;
>>> }
>>>
>>> Y<alignof(X)>::type is non-dependent, isn't it ?
>>>
>>
>> X is a dependent type [*], so alignof(X) is value-dependent [**], so
>> Y<alignof(X)> is a dependent type, so you need typename.
>>
>> [*] This is currently under discussion in CWG; the outcome seems likely
>> to be that X is treated as a member of the current instantiation.
>> [**] Even if X is a member of the current instantiation, sizeof(X) and
>> alignof(X) should be value-dependent; the current standard wording gets
>> this case wrong.
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20150306/8f247285/attachment.html>


More information about the cfe-dev mailing list