Commit 346928a2 by Jason Merrill Committed by Jason Merrill

DR 657

	DR 657
	* pt.c (tsubst_function_type): Call abstract_virtuals_error_sfinae.
	(tsubst_arg_types): Likewise.

From-SVN: r196733
parent 0cc5ae8d
2013-03-16 Jason Merrill <jason@redhat.com>
DR 657
* pt.c (tsubst_function_type): Call abstract_virtuals_error_sfinae.
(tsubst_arg_types): Likewise.
DR 1518
PR c++/54835
* call.c (convert_like_real): Check for explicit constructors
......
......@@ -10850,6 +10850,9 @@ tsubst_arg_types (tree arg_types,
}
return error_mark_node;
}
/* DR 657. */
if (abstract_virtuals_error_sfinae (NULL_TREE, type, complain))
return error_mark_node;
/* Do array-to-pointer, function-to-pointer conversion, and ignore
top-level qualifiers as required. */
......@@ -10912,10 +10915,8 @@ tsubst_function_type (tree t,
return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
if (return_type == error_mark_node)
return error_mark_node;
/* The standard does not presently indicate that creation of a
function type with an invalid return type is a deduction failure.
However, that is clearly analogous to creating an array of "void"
or a reference to a reference. This is core issue #486. */
/* DR 486 clarifies that creation of a function type with an
invalid return type is a deduction failure. */
if (TREE_CODE (return_type) == ARRAY_TYPE
|| TREE_CODE (return_type) == FUNCTION_TYPE)
{
......@@ -10928,6 +10929,9 @@ tsubst_function_type (tree t,
}
return error_mark_node;
}
/* And DR 657. */
if (abstract_virtuals_error_sfinae (NULL_TREE, return_type, complain))
return error_mark_node;
/* Substitute the argument types. */
arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args, NULL_TREE,
......
// DR 657
// Test that a return or parameter type with abstract class type causes a
// deduction failure.
struct A
{
A();
A(int);
virtual void f() = 0;
};
template<class T> T declval();
template<class T> int declval(...);
template<class T> void arg(T);
template<class T> int arg(...);
int main()
{
int i = declval<A>();
i = arg<A>(1);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment