I'm reading the Boost.Proto Users' Guide.
typedef typename Context::template eval<Expr>::result_type type;
I don't understand the meaning of the syntax.
I thought the C ++ typedef had two arguments, but is there three possible cases?
If so, what does it mean?
Or, if there are only two typedef arguments, what does the typename Context :: template in the above syntax mean?
I'm ashamed to say that I've briefly reviewed how to use typedefs, but I don't understand the meaning of the above syntax. The URL to the hint and the explanation about the typedef will be helpful, so please do not hesitate to contact us.
At first glance it looks like four, but one of them is a
修飾つき識別子and part of the type notation.
I'm giving a type alias with a typedef, but the original type name that already exists
So the typedef has two arguments.
Context::template is a nested name specifier.
ISO / IEC 14882: 1998 JIS X 3014: 2003 5.1 –7
Limits the search for subsequent identifiers
eval<Expr>::result_type to the
Context class name.
typename is required because it is necessary to specify that
result_type is a type.
typedef struct mystruct value_type;
Is the same as not saying three arguments to a typedef.