diff options
Diffstat (limited to 'gcc-4.9/libstdc++-v3/testsuite/20_util/common_type/requirements/sfinae_friendly_2.cc')
-rw-r--r-- | gcc-4.9/libstdc++-v3/testsuite/20_util/common_type/requirements/sfinae_friendly_2.cc | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/gcc-4.9/libstdc++-v3/testsuite/20_util/common_type/requirements/sfinae_friendly_2.cc b/gcc-4.9/libstdc++-v3/testsuite/20_util/common_type/requirements/sfinae_friendly_2.cc new file mode 100644 index 000000000..cf35ac973 --- /dev/null +++ b/gcc-4.9/libstdc++-v3/testsuite/20_util/common_type/requirements/sfinae_friendly_2.cc @@ -0,0 +1,68 @@ +// { dg-options "-std=c++11" } +// { dg-do compile } + +// Copyright (C) 2012-2014 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +#include <type_traits> +#include <array> +#include <utility> + +template<typename... Args> +constexpr +std::array<typename std::common_type<Args...>::type, + sizeof...(Args)> +make_array(Args&&... args) // { dg-error "invalid use" } +{ + typedef typename std::common_type<Args...>::type CT; + return std::array<CT, sizeof...(Args)>{static_cast<CT> + (std::forward<Args>(args))...}; +} + +void test01() +{ + constexpr auto a1 = make_array(0); + constexpr auto a2 = make_array(0, 1.2); + constexpr auto a3 = make_array(5, true, 3.1415f, 'c'); + + int i{}; + double d{1.2}; + float f{3.1415f}; + + auto b1 = make_array(i); + auto b2 = make_array(i, 1.2); + auto b3 = make_array(i, d); + auto b4 = make_array(0, d); + auto b5 = make_array(i, true, f, 'c'); + + static_assert(std::is_same<decltype(a1), const std::array<int, 1>>(), ""); + static_assert(std::is_same<decltype(a2), const std::array<double, 2>>(), ""); + static_assert(std::is_same<decltype(a3), const std::array<float, 4>>(), ""); + + static_assert(std::is_same<decltype(b1), std::array<int, 1>>(), ""); + static_assert(std::is_same<decltype(b2), std::array<double, 2>>(), ""); + static_assert(std::is_same<decltype(b3), std::array<double, 2>>(), ""); + static_assert(std::is_same<decltype(b4), std::array<double, 2>>(), ""); + static_assert(std::is_same<decltype(b5), std::array<float, 4>>(), ""); +} + +void test02() +{ + make_array(); // { dg-error "no matching function" } +} +// { dg-prune-output "substitution" } +// { dg-prune-output "include" } |