Commit 1a763062 by Marc Glisse Committed by Marc Glisse

call.c (convert_like_real): Check complain.

2014-01-02  Marc Glisse  <marc.glisse@inria.fr>

gcc/cp/
	* call.c (convert_like_real): Check complain.
gcc/testsuite/
	* g++.dg/cpp0x/initlist-explicit-sfinae.C: New file.

From-SVN: r206302
parent aa118a03
2014-01-02 Marc Glisse <marc.glisse@inria.fr>
* call.c (convert_like_real): Check complain.
2014-01-02 Marc Glisse <marc.glisse@inria.fr>
PR c++/59378
* typeck.c (build_x_vec_perm_expr): Handle non-dependent arguments
in templates.
......
......@@ -5934,6 +5934,8 @@ convert_like_real (conversion *convs, tree expr, tree fn, int argnum,
&& !(BRACE_ENCLOSED_INITIALIZER_P (expr)
&& CONSTRUCTOR_IS_DIRECT_INIT (expr)))
{
if (!(complain & tf_error))
return error_mark_node;
error ("converting to %qT from initializer list would use "
"explicit constructor %qD", totype, convfn);
}
......
2014-01-02 Marc Glisse <marc.glisse@inria.fr>
* g++.dg/cpp0x/initlist-explicit-sfinae.C: New file.
2014-01-02 Marc Glisse <marc.glisse@inria.fr>
PR c++/59378
* g++.dg/ext/pr59378.C: New file.
......
// { dg-do compile }
// { dg-options -std=c++11 }
template<typename _Tp>
_Tp&& declval() noexcept;
template<bool b>
struct bt {
static constexpr bool value = b;
};
template <typename To_, typename... From_>
class my_is_convertible_many {
private:
template <typename To>
struct indirector {
indirector(To);
};
template <typename To, typename... From>
struct tag {};
template <typename To, typename... From>
static auto test(tag<To, From...>)
-> decltype(indirector<To>({declval<From>()...}), bt<true>());
static auto test(...)
-> bt<false>;
public:
static constexpr bool value = decltype(test(tag<To_, From_...>()))::value;
};
struct A {};
struct B {};
struct C {};
struct Test {
Test(A, A);
//Test(B, B);
explicit Test(C, C);
};
int main() {
static_assert(my_is_convertible_many<Test, A, A>::value,""); // true, correct
static_assert(!my_is_convertible_many<Test, B, B>::value,""); // false, correct
static_assert(!my_is_convertible_many<Test, C, C>::value,""); // error
return 0;
}
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