]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/boost/gil/detail/std_common_type.hpp
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / boost / boost / gil / detail / std_common_type.hpp
CommitLineData
92f5a8d4
TL
1//
2// Copyright Louis Dionne 2013-2017
3//
4// Distributed under the Boost Software License, Version 1.0.
5//(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
6//
7#ifndef BOOST_GIL_DETAIL_STD_COMMON_TYPE_HPP
8#define BOOST_GIL_DETAIL_STD_COMMON_TYPE_HPP
9
10#include <type_traits>
11#include <utility>
12
13namespace boost { namespace gil { namespace detail {
14
15// Defines a SFINAE-friendly version of `std::common_type`.
16//
17// Based on boost/hana/detail/std_common_type.hpp
18// Equivalent to `std::common_type`, except it is SFINAE-friendly and
19// does not support custom specializations.
20
21template <typename T, typename U, typename = void>
22struct std_common_type {};
23
24template <typename T, typename U>
25struct std_common_type
26<
27 T, U,
28 decltype((void)(true ? std::declval<T>() : std::declval<U>()))
29>
30{
31 using type = typename std::decay
32 <
33 decltype(true ? std::declval<T>() : std::declval<U>())
34 >::type;
35};
36
37}}} // namespace boost::gil::detail
38
39#endif