Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add SFINAE-friendly version of std::common_type (#298)
It should help to improve uses of SFINAE like the one from #295 and fix #289 for MSVC 14.0 (VS2015) for good. Copied from Boost.Hana.
- Loading branch information
Showing
2 changed files
with
57 additions
and
12 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
// | ||
// Copyright Louis Dionne 2013-2017 | ||
// | ||
// Distributed under the Boost Software License, Version 1.0. | ||
//(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt) | ||
// | ||
#ifndef BOOST_GIL_DETAIL_STD_COMMON_TYPE_HPP | ||
#define BOOST_GIL_DETAIL_STD_COMMON_TYPE_HPP | ||
|
||
#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>()) | ||
>::type; | ||
}; | ||
|
||
}}} // namespace boost::gil::detail | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters