diff options
author | Ville Voutilainen <ville.voutilainen@gmail.com> | 2018-09-13 00:10:43 +0300 |
---|---|---|
committer | Ville Voutilainen <ville@gcc.gnu.org> | 2018-09-13 00:10:43 +0300 |
commit | b51da998eee6b17630d7c9b1035cf47b77aa2af3 (patch) | |
tree | 4fd908638cd6d0d5d8558cc86e4c79c1bffbd2e5 | |
parent | 4911b24d71955b757fdaac29b878ae33c32f3e0b (diff) | |
download | gcc-b51da998eee6b17630d7c9b1035cf47b77aa2af3.zip gcc-b51da998eee6b17630d7c9b1035cf47b77aa2af3.tar.gz gcc-b51da998eee6b17630d7c9b1035cf47b77aa2af3.tar.bz2 |
re PR c++/87093 (is_constructible (__is_constructible() instrinsic) explicitly instantiates conversion member function of source)
PR c++/87093
gcc/cp
PR c++/87093
* method.c (constructible_expr): We're in an unevaluated context
in all cases, not just for class targets.
testsuite/
PR c++/87093
* g++.dg/ext/is_constructible2.C: New.
From-SVN: r264253
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/method.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ext/is_constructible2.C | 12 |
3 files changed, 19 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 9201d67..ca8939d 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2018-09-13 Ville Voutilainen <ville.voutilainen@gmail.com> + + PR c++/87093 + * method.c (constructible_expr): We're in an unevaluated context + in all cases, not just for class targets. + 2018-09-12 David Malcolm <dmalcolm@redhat.com> PR c++/85110 diff --git a/gcc/cp/method.c b/gcc/cp/method.c index 0b208a8d..d75dacb 100644 --- a/gcc/cp/method.c +++ b/gcc/cp/method.c @@ -1144,11 +1144,11 @@ static tree constructible_expr (tree to, tree from) { tree expr; + cp_unevaluated cp_uneval_guard; if (CLASS_TYPE_P (to)) { tree ctype = to; vec<tree, va_gc> *args = NULL; - cp_unevaluated cp_uneval_guard; if (!TYPE_REF_P (to)) to = cp_build_reference_type (to, /*rval*/false); tree ob = build_stub_object (to); diff --git a/gcc/testsuite/g++.dg/ext/is_constructible2.C b/gcc/testsuite/g++.dg/ext/is_constructible2.C new file mode 100644 index 0000000..8f25e7e --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/is_constructible2.C @@ -0,0 +1,12 @@ +// { dg-do compile { target c++11 } } + +#include <type_traits> + +template <typename T> struct x { + operator bool() { + static_assert(!std::is_same<T, T>::value, ""); + return false; + } +}; + +static constexpr auto a = __is_constructible(bool, x<int>); |