Boost C++ Libraries of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

This is the documentation for an old version of Boost. Click here to view this page for the latest version.


// Copyright Louis Dionne 2013-2017
// Distributed under the Boost Software License, Version 1.0.
//(See accompanying file or copy at

#include <type_traits>
#include <utility>

namespace boost { namespace gil { namespace detail {

// Defines a SFINAE-friendly version of `std::common_type`.
// Based on boost/hana/detail/std_common_type.hpp
// Equivalent to `std::common_type`, except it is SFINAE-friendly and
// does not support custom specializations.

template <typename T, typename U, typename = void>
struct std_common_type {};

template <typename T, typename U>
struct std_common_type
    T, U,
    decltype((void)(true ? std::declval<T>() : std::declval<U>()))
    using type = typename std::decay
            decltype(true ? std::declval<T>() : std::declval<U>())

}}} // namespace boost::gil::detail