pt.c (lookup_template_variable): Make dependent variable templates have unknown type.
2014-08-13 Andrew Sutton <andrew.n.sutton@gmail.com> * pt.c (lookup_template_variable): Make dependent variable templates have unknown type. From-SVN: r213910
This commit is contained in:
parent
429e4fdebf
commit
a3fea1ef37
3 changed files with 28 additions and 2 deletions
|
@ -1,3 +1,8 @@
|
|||
2014-08-13 Andrew Sutton <andrew.n.sutton@gmail.com>
|
||||
|
||||
* pt.c (lookup_template_variable): Make dependent variable templates
|
||||
have unknown type.
|
||||
|
||||
2014-08-13 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
* parser.c (cp_parser_elaborated_type_specifier): Handle
|
||||
|
|
13
gcc/cp/pt.c
13
gcc/cp/pt.c
|
@ -7965,13 +7965,22 @@ lookup_template_class (tree d1, tree arglist, tree in_decl, tree context,
|
|||
return ret;
|
||||
}
|
||||
|
||||
/* Return a TEMPLATE_ID_EXPR for the given variable template and ARGLIST. */
|
||||
/* Return a TEMPLATE_ID_EXPR for the given variable template and ARGLIST.
|
||||
If the ARGLIST refers to any template parameters, the type of the
|
||||
expression is the unknown_type_node since the template-id could
|
||||
refer to an explicit or partial specialization. */
|
||||
|
||||
tree
|
||||
lookup_template_variable (tree templ, tree arglist)
|
||||
{
|
||||
return build2 (TEMPLATE_ID_EXPR, TREE_TYPE (templ), templ, arglist);
|
||||
tree type;
|
||||
if (uses_template_parms (arglist))
|
||||
type = unknown_type_node;
|
||||
else
|
||||
type = TREE_TYPE (templ);
|
||||
return build2 (TEMPLATE_ID_EXPR, type, templ, arglist);
|
||||
}
|
||||
|
||||
|
||||
struct pair_fn_data
|
||||
{
|
||||
|
|
12
gcc/testsuite/g++.dg/cpp1y/var-templ6.C
Normal file
12
gcc/testsuite/g++.dg/cpp1y/var-templ6.C
Normal file
|
@ -0,0 +1,12 @@
|
|||
// { dg-options "-std=c++1y" }
|
||||
|
||||
template<typename T>
|
||||
constexpr bool Class = __is_class(T);
|
||||
|
||||
template<typename T>
|
||||
constexpr bool Test = Class<T>;
|
||||
|
||||
struct S { };
|
||||
|
||||
static_assert(!Test<int>, "");
|
||||
static_assert(Test<S>, "");
|
Loading…
Add table
Reference in a new issue