Added makearray
This commit is contained in:
@ -10,6 +10,7 @@ set(headers
|
|||||||
src/cpputils.h
|
src/cpputils.h
|
||||||
src/crc32builder.h
|
src/crc32builder.h
|
||||||
src/delayedconstruction.h
|
src/delayedconstruction.h
|
||||||
|
src/makearray.h
|
||||||
src/numberparsing.h
|
src/numberparsing.h
|
||||||
src/refwhenneeded.h
|
src/refwhenneeded.h
|
||||||
src/strutils.h
|
src/strutils.h
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
HEADERS += \
|
HEADERS += \
|
||||||
$$PWD/src/cleanuphelper.h \
|
$$PWD/src/cleanuphelper.h \
|
||||||
|
$$PWD/src/color_utils.h \
|
||||||
$$PWD/src/cppbitmask.h \
|
$$PWD/src/cppbitmask.h \
|
||||||
$$PWD/src/cppflags.h \
|
$$PWD/src/cppflags.h \
|
||||||
$$PWD/src/cppmacros.h \
|
$$PWD/src/cppmacros.h \
|
||||||
@ -7,9 +8,13 @@ HEADERS += \
|
|||||||
$$PWD/src/cppsignal.h \
|
$$PWD/src/cppsignal.h \
|
||||||
$$PWD/src/cpptypesafeenum.h \
|
$$PWD/src/cpptypesafeenum.h \
|
||||||
$$PWD/src/cpputils.h \
|
$$PWD/src/cpputils.h \
|
||||||
|
$$PWD/src/crc32builder.h \
|
||||||
$$PWD/src/delayedconstruction.h \
|
$$PWD/src/delayedconstruction.h \
|
||||||
|
$$PWD/src/makearray.h \
|
||||||
|
$$PWD/src/numberparsing.h \
|
||||||
$$PWD/src/refwhenneeded.h \
|
$$PWD/src/refwhenneeded.h \
|
||||||
$$PWD/src/strutils.h
|
$$PWD/src/strutils.h
|
||||||
|
|
||||||
SOURCES += \
|
SOURCES += \
|
||||||
|
$$PWD/src/color_utils.cpp \
|
||||||
$$PWD/src/strutils.cpp
|
$$PWD/src/strutils.cpp
|
||||||
|
30
src/makearray.h
Normal file
30
src/makearray.h
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
// system includes
|
||||||
|
#include <array>
|
||||||
|
|
||||||
|
namespace goe {
|
||||||
|
namespace details {
|
||||||
|
template<class> struct is_ref_wrapper : std::false_type {};
|
||||||
|
template<class T> struct is_ref_wrapper<std::reference_wrapper<T>> : std::true_type {};
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
using not_ref_wrapper = std::negation<is_ref_wrapper<std::decay_t<T>>>;
|
||||||
|
|
||||||
|
template <class D, class...> struct return_type_helper { using type = D; };
|
||||||
|
template <class... Types>
|
||||||
|
struct return_type_helper<void, Types...> : std::common_type<Types...> {
|
||||||
|
//static_assert(std::conjunction_v<not_ref_wrapper<Types>...>,
|
||||||
|
// "Types cannot contain reference_wrappers when D is void");
|
||||||
|
};
|
||||||
|
|
||||||
|
template <class D, class... Types>
|
||||||
|
using return_type = std::array<typename return_type_helper<D, Types...>::type,
|
||||||
|
sizeof...(Types)>;
|
||||||
|
} // namespace details
|
||||||
|
|
||||||
|
template < class D = void, class... Types>
|
||||||
|
constexpr details::return_type<D, Types...> make_array(Types&&... t) {
|
||||||
|
return {std::forward<Types>(t)... };
|
||||||
|
}
|
||||||
|
} // namespace goe
|
Reference in New Issue
Block a user