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>
|
2014-08-13 Paolo Carlini <paolo.carlini@oracle.com>
|
||||||
|
|
||||||
* parser.c (cp_parser_elaborated_type_specifier): Handle
|
* 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 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
|
tree
|
||||||
lookup_template_variable (tree templ, tree arglist)
|
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
|
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