PR c++/85866 - error with .* in default template arg.

* pt.c (tsubst_copy_and_build): Handle partial instantiation.

From-SVN: r260562
This commit is contained in:
Jason Merrill 2018-05-22 23:52:49 -04:00 committed by Jason Merrill
parent 720820185f
commit 0d2e69cb3c
3 changed files with 37 additions and 1 deletions

View File

@ -1,3 +1,8 @@
2018-05-22 Jason Merrill <jason@redhat.com>
PR c++/85866 - error with .* in default template arg.
* pt.c (tsubst_copy_and_build): Handle partial instantiation.
2018-05-21 Paolo Carlini <paolo.carlini@oracle.com>
* parser.c (cp_parser_parameter_declaration_list): Remove

View File

@ -18433,7 +18433,9 @@ tsubst_copy_and_build (tree t,
/* Unsupported internal function with arguments. */
gcc_unreachable ();
}
else if (TREE_CODE (function) == OFFSET_REF)
else if (TREE_CODE (function) == OFFSET_REF
|| TREE_CODE (function) == DOTSTAR_EXPR
|| TREE_CODE (function) == MEMBER_REF)
ret = build_offset_ref_call_from_tree (function, &call_args,
complain);
else if (TREE_CODE (function) == COMPONENT_REF)

View File

@ -0,0 +1,29 @@
// PR c++/85866
// { dg-do compile { target c++11 } }
template<typename _Tp, typename _Up = _Tp&&>
_Up
__declval(int);
template<typename _Tp>
_Tp
__declval(long);
template<typename _Tp>
auto declval() noexcept -> decltype(__declval<_Tp>(0));
template<typename...>
using void_t = void;
template<typename U, typename V,
void_t<decltype ( (declval<U>().*declval<V>()) () )
>* = nullptr>
void boom(){}
struct Foo {
void bar(){}
};
int main() {
boom<Foo, decltype(&Foo::bar)>();
}