diff options
Diffstat (limited to 'test/std/utilities/utility')
8 files changed, 92 insertions, 11 deletions
diff --git a/test/std/utilities/utility/as_const/as_const.fail.cpp b/test/std/utilities/utility/as_const/as_const.fail.cpp index 6334e1460259c..c28957cfc505b 100644 --- a/test/std/utilities/utility/as_const/as_const.fail.cpp +++ b/test/std/utilities/utility/as_const/as_const.fail.cpp @@ -18,5 +18,5 @@ struct S {int i;}; int main() { - std::as_const(S{}); + std::as_const(S{}); } diff --git a/test/std/utilities/utility/as_const/as_const.pass.cpp b/test/std/utilities/utility/as_const/as_const.pass.cpp index 7bb5849d0bd05..268f2d1b04ee0 100644 --- a/test/std/utilities/utility/as_const/as_const.pass.cpp +++ b/test/std/utilities/utility/as_const/as_const.pass.cpp @@ -37,10 +37,10 @@ void test(T& t) int main() { - int i = 3; - double d = 4.0; - S s{2}; - test(i); - test(d); - test(s); + int i = 3; + double d = 4.0; + S s{2}; + test(i); + test(d); + test(s); } diff --git a/test/std/utilities/utility/forward/forward.fail.cpp b/test/std/utilities/utility/forward/forward.fail.cpp index a3bb890482ef5..c845216d86dc5 100644 --- a/test/std/utilities/utility/forward/forward.fail.cpp +++ b/test/std/utilities/utility/forward/forward.fail.cpp @@ -25,7 +25,7 @@ int main() #if TEST_STD_VER >= 11 { std::forward<A&>(source()); // expected-note {{requested here}} - // expected-error@type_traits:* 1 {{static_assert failed "can not forward an rvalue as an lvalue"}} + // expected-error-re@type_traits:* 1 {{static_assert failed{{.*}} "can not forward an rvalue as an lvalue"}} } #else { diff --git a/test/std/utilities/utility/pairs/pair.astuple/tuple_element.fail.cpp b/test/std/utilities/utility/pairs/pair.astuple/tuple_element.fail.cpp index 8e994126cc0d2..4ca31f7debe86 100644 --- a/test/std/utilities/utility/pairs/pair.astuple/tuple_element.fail.cpp +++ b/test/std/utilities/utility/pairs/pair.astuple/tuple_element.fail.cpp @@ -18,5 +18,5 @@ int main() { typedef std::pair<int, short> T; - typename std::tuple_element<2, T>::type foo; // expected-error@utility:* {{Index out of bounds in std::tuple_element<std::pair<T1, T2>>}} + std::tuple_element<2, T>::type foo; // expected-error@utility:* {{Index out of bounds in std::tuple_element<std::pair<T1, T2>>}} } diff --git a/test/std/utilities/utility/pairs/pairs.pair/const_pair_U_V.pass.cpp b/test/std/utilities/utility/pairs/pairs.pair/const_pair_U_V.pass.cpp index ade8130d78224..715b655377615 100644 --- a/test/std/utilities/utility/pairs/pairs.pair/const_pair_U_V.pass.cpp +++ b/test/std/utilities/utility/pairs/pairs.pair/const_pair_U_V.pass.cpp @@ -71,7 +71,7 @@ int main() P1 p1(42, 101); P2 p2(p1); assert(p2.first == 42); - assert(p2.second = 101); + assert(p2.second == 101); } { test_pair_const<AllCtors, AllCtors>(); // copy construction diff --git a/test/std/utilities/utility/pairs/pairs.pair/implicit_deduction_guides.pass.cpp b/test/std/utilities/utility/pairs/pairs.pair/implicit_deduction_guides.pass.cpp new file mode 100644 index 0000000000000..7933dd99c1f4c --- /dev/null +++ b/test/std/utilities/utility/pairs/pairs.pair/implicit_deduction_guides.pass.cpp @@ -0,0 +1,80 @@ +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// UNSUPPORTED: c++98, c++03, c++11, c++14 +// UNSUPPORTED: libcpp-no-deduction-guides + +// GCC's implementation of class template deduction is still immature and runs +// into issues with libc++. However GCC accepts this code when compiling +// against libstdc++. +// XFAIL: gcc + +// <utility> + +// Test that the constructors offered by std::pair are formulated +// so they're compatible with implicit deduction guides, or if that's not +// possible that they provide explicit guides to make it work. + +#include <utility> +#include <memory> +#include <string> +#include <cassert> + +#include "test_macros.h" +#include "archetypes.hpp" + + +// Overloads +// --------------- +// (1) pair(const T1&, const T2&) -> pair<T1, T2> +// (2) explicit pair(const T1&, const T2&) -> pair<T1, T2> +// (3) pair(pair const& t) -> decltype(t) +// (4) pair(pair&& t) -> decltype(t) +// (5) pair(pair<U1, U2> const&) -> pair<U1, U2> +// (6) explicit pair(pair<U1, U2> const&) -> pair<U1, U2> +// (7) pair(pair<U1, U2> &&) -> pair<U1, U2> +// (8) explicit pair(pair<U1, U2> &&) -> pair<U1, U2> +int main() +{ + using E = ExplicitTestTypes::TestType; + static_assert(!std::is_convertible<E const&, E>::value, ""); + { // Testing (1) + int const x = 42; + std::pair t1("abc", x); + ASSERT_SAME_TYPE(decltype(t1), std::pair<const char*, int>); + } + { // Testing (2) + std::pair p1(E{}, 42); + ASSERT_SAME_TYPE(decltype(p1), std::pair<E, int>); + + const E t{}; + std::pair p2(t, E{}); + ASSERT_SAME_TYPE(decltype(p2), std::pair<E, E>); + } + { // Testing (3, 5) + std::pair<double, decltype(nullptr)> const p(0.0, nullptr); + std::pair p1(p); + ASSERT_SAME_TYPE(decltype(p1), std::pair<double, decltype(nullptr)>); + } + { // Testing (3, 6) + std::pair<E, decltype(nullptr)> const p(E{}, nullptr); + std::pair p1(p); + ASSERT_SAME_TYPE(decltype(p1), std::pair<E, decltype(nullptr)>); + } + { // Testing (4, 7) + std::pair<std::string, void*> p("abc", nullptr); + std::pair p1(std::move(p)); + ASSERT_SAME_TYPE(decltype(p1), std::pair<std::string, void*>); + } + { // Testing (4, 8) + std::pair<std::string, E> p("abc", E{}); + std::pair p1(std::move(p)); + ASSERT_SAME_TYPE(decltype(p1), std::pair<std::string, E>); + } +} diff --git a/test/std/utilities/utility/pairs/pairs.pair/rv_pair_U_V.pass.cpp b/test/std/utilities/utility/pairs/pairs.pair/rv_pair_U_V.pass.cpp index 2856190841c0e..f5d3bb621debc 100644 --- a/test/std/utilities/utility/pairs/pairs.pair/rv_pair_U_V.pass.cpp +++ b/test/std/utilities/utility/pairs/pairs.pair/rv_pair_U_V.pass.cpp @@ -81,7 +81,7 @@ int main() P1 p1(42, 101); P2 p2(std::move(p1)); assert(p2.first == 42); - assert(p2.second = 101); + assert(p2.second == 101); } { test_pair_rv<AllCtors, AllCtors>(); diff --git a/test/std/utilities/utility/synopsis.pass.cpp b/test/std/utilities/utility/synopsis.pass.cpp index 5f5b4eeaad524..009b65cbbe53a 100644 --- a/test/std/utilities/utility/synopsis.pass.cpp +++ b/test/std/utilities/utility/synopsis.pass.cpp @@ -17,5 +17,6 @@ int main() { std::initializer_list<int> x; + (void)x; } |
