diff --git a/src/blackmisc/aviation/aircraftsituationlist.cpp b/src/blackmisc/aviation/aircraftsituationlist.cpp index 48df03809..45a6c00fd 100644 --- a/src/blackmisc/aviation/aircraftsituationlist.cpp +++ b/src/blackmisc/aviation/aircraftsituationlist.cpp @@ -9,7 +9,6 @@ #include "blackmisc/aviation/aircraftsituationlist.h" #include "blackmisc/aviation/aircraftsituation.h" -#include "blackmisc/metaclassprivate.h" #include diff --git a/src/blackmisc/aviation/airporticaocode.h b/src/blackmisc/aviation/airporticaocode.h index 89826bf45..e6121ae08 100644 --- a/src/blackmisc/aviation/airporticaocode.h +++ b/src/blackmisc/aviation/airporticaocode.h @@ -14,7 +14,6 @@ #include "blackmisc/blackmiscexport.h" #include "blackmisc/metaclass.h" -#include "blackmisc/metaclassprivate.h" #include "blackmisc/propertyindex.h" #include "blackmisc/valueobject.h" diff --git a/src/blackmisc/aviation/airportlist.cpp b/src/blackmisc/aviation/airportlist.cpp index 026ae5844..ac39402c2 100644 --- a/src/blackmisc/aviation/airportlist.cpp +++ b/src/blackmisc/aviation/airportlist.cpp @@ -9,7 +9,6 @@ #include "blackmisc/aviation/airportlist.h" #include "blackmisc/compare.h" -#include "blackmisc/metaclassprivate.h" #include "blackmisc/range.h" #include diff --git a/src/blackmisc/aviation/atcstation.cpp b/src/blackmisc/aviation/atcstation.cpp index 96a5aafd5..15e4f2dad 100644 --- a/src/blackmisc/aviation/atcstation.cpp +++ b/src/blackmisc/aviation/atcstation.cpp @@ -11,7 +11,6 @@ #include "blackmisc/audio/voiceroom.h" #include "blackmisc/aviation/comsystem.h" #include "blackmisc/compare.h" -#include "blackmisc/metaclassprivate.h" #include "blackmisc/pq/physicalquantity.h" #include "blackmisc/pq/units.h" #include "blackmisc/propertyindex.h" diff --git a/src/blackmisc/aviation/atcstationlist.cpp b/src/blackmisc/aviation/atcstationlist.cpp index 01c687fd4..c0ffffaa9 100644 --- a/src/blackmisc/aviation/atcstationlist.cpp +++ b/src/blackmisc/aviation/atcstationlist.cpp @@ -12,7 +12,6 @@ #include "blackmisc/aviation/comsystem.h" #include "blackmisc/compare.h" #include "blackmisc/iterator.h" -#include "blackmisc/metaclassprivate.h" #include "blackmisc/network/user.h" #include "blackmisc/predicates.h" #include "blackmisc/range.h" diff --git a/src/blackmisc/aviation/callsign.h b/src/blackmisc/aviation/callsign.h index 95a858149..2004c008a 100644 --- a/src/blackmisc/aviation/callsign.h +++ b/src/blackmisc/aviation/callsign.h @@ -15,7 +15,6 @@ #include "blackmisc/blackmiscexport.h" #include "blackmisc/icon.h" #include "blackmisc/metaclass.h" -#include "blackmisc/metaclassprivate.h" #include "blackmisc/propertyindex.h" #include "blackmisc/valueobject.h" #include "blackmisc/variant.h" diff --git a/src/blackmisc/aviation/callsignset.h b/src/blackmisc/aviation/callsignset.h index c9a42eceb..cdafed6a1 100644 --- a/src/blackmisc/aviation/callsignset.h +++ b/src/blackmisc/aviation/callsignset.h @@ -16,7 +16,6 @@ #include "blackmisc/blackmiscexport.h" #include "blackmisc/collection.h" #include "blackmisc/compare.h" -#include "blackmisc/metaclassprivate.h" #include "blackmisc/sequence.h" #include diff --git a/src/blackmisc/aviation/flightplanlist.cpp b/src/blackmisc/aviation/flightplanlist.cpp index 77adb2200..a65fb3fd1 100644 --- a/src/blackmisc/aviation/flightplanlist.cpp +++ b/src/blackmisc/aviation/flightplanlist.cpp @@ -10,7 +10,6 @@ #include "flightplanlist.h" #include "blackmisc/compare.h" #include "blackmisc/iterator.h" -#include "blackmisc/metaclassprivate.h" #include "blackmisc/predicates.h" #include "blackmisc/range.h" diff --git a/src/blackmisc/aviation/liverylist.cpp b/src/blackmisc/aviation/liverylist.cpp index 895569fdf..d7b1858bf 100644 --- a/src/blackmisc/aviation/liverylist.cpp +++ b/src/blackmisc/aviation/liverylist.cpp @@ -8,7 +8,6 @@ */ #include "blackmisc/aviation/liverylist.h" -#include "blackmisc/metaclassprivate.h" #include "blackmisc/predicates.h" #include "blackmisc/range.h" diff --git a/src/blackmisc/metaclass.h b/src/blackmisc/metaclass.h index 8dd0b0bd0..d9e9a055a 100644 --- a/src/blackmisc/metaclass.h +++ b/src/blackmisc/metaclass.h @@ -12,8 +12,11 @@ #ifndef BLACKMISC_METACLASS_H #define BLACKMISC_METACLASS_H -#include "blackmisc/metaclassprivate.h" #include "blackmisc/invoke.h" +#include "blackmisc/integersequence.h" +#include +#include +#include /*! * \defgroup MetaClass Metaclass system @@ -21,6 +24,25 @@ * members of value classes. */ +//! \cond PRIVATE + +// Work around MinGW problem with combination of constexpr and extern template +#if defined(Q_OS_WIN) && defined(Q_CC_GNU) +#define BLACK_NO_EXPORT_CONSTEXPR constexpr inline __attribute__((gnu_inline)) +#else +#define BLACK_NO_EXPORT_CONSTEXPR constexpr +#endif + +// MSVC, GCC, Clang all have non-standard extensions for skipping trailing +// commas in variadic macros, but the MSVC extension differs from the others. +#ifdef Q_CC_MSVC +#define BLACK_TRAILING_VA_ARGS(...) ,__VA_ARGS__ +#else +#define BLACK_TRAILING_VA_ARGS(...) ,##__VA_ARGS__ +#endif + +//! \endcond + /*! * Macro to define a nested metaclass that describes the attributes of its * enclosing class. Use in the private section of the class. @@ -142,7 +164,7 @@ namespace BlackMisc } //! Return name as QLatin1String. - Q_DECL_CONSTEXPR auto latin1Name() const { return QLatin1String(m_name); } + constexpr auto latin1Name() const { return QLatin1String(m_name); } }; /*! @@ -153,16 +175,16 @@ namespace BlackMisc struct CMetaMemberList { //! Tuple of CMetaMember. - const Private::tuple m_members; + const std::tuple m_members; //! Number of members. static constexpr size_t c_size = sizeof...(Members); //! Convenience method returning the member at index I. template - constexpr auto at(std::integral_constant = {}) const BLACK_TRAILING_RETURN(Private::get(m_members)) + constexpr auto at(std::integral_constant = {}) const { - return Private::get(m_members); + return std::get(m_members); } }; @@ -203,7 +225,7 @@ namespace BlackMisc template constexpr static CMetaMemberList makeMetaMemberList(Members... members) { - return { Private::tuple(members...) }; + return { std::tuple(members...) }; } //! Return a CMetaMethod of type deduced from the type of the member. @@ -256,7 +278,7 @@ namespace BlackMisc template using index = std::integral_constant; - constexpr static auto members() BLACK_TRAILING_RETURN(MetaClass::getMemberList()) { return MetaClass::getMemberList(); } + constexpr static auto members() { return MetaClass::getMemberList(); } }; namespace Private diff --git a/src/blackmisc/metaclassprivate.h b/src/blackmisc/metaclassprivate.h deleted file mode 100644 index 013133d65..000000000 --- a/src/blackmisc/metaclassprivate.h +++ /dev/null @@ -1,110 +0,0 @@ -/* Copyright (C) 2016 - * swift Project Community / Contributors - * - * This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level - * directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project, - * including this file, may be copied, modified, propagated, or distributed except according to the terms - * contained in the LICENSE file. - */ - -//! \file - -#ifndef BLACKMISC_METACLASSPRIVATE_H -#define BLACKMISC_METACLASSPRIVATE_H - -#include "integersequence.h" -#include -#include -#include - -//! \cond PRIVATE - -// GCC 4.9 doesn't utilize constexpr in the standard library -#if ! (defined(Q_CC_GNU) && __GNUC__ <= 4) -#define BLACK_HAS_CONSTEXPR_STDLIB -#endif - -// Work around MinGW problem with combination of constexpr and extern template -#if defined(Q_OS_WIN) && defined(Q_CC_GNU) -#define BLACK_NO_EXPORT_CONSTEXPR constexpr inline __attribute__((gnu_inline)) -#else -#define BLACK_NO_EXPORT_CONSTEXPR constexpr -#endif - -// MSVC, GCC, Clang all have non-standard extensions for skipping trailing -// commas in variadic macros, but the MSVC extension differs from the others. -#ifdef Q_CC_MSVC -#define BLACK_TRAILING_VA_ARGS(...) ,__VA_ARGS__ -#else -#define BLACK_TRAILING_VA_ARGS(...) ,##__VA_ARGS__ -#endif - -// Work around MSVC constexpr bug -// https://connect.microsoft.com/VisualStudio/feedback/details/2028721 -#ifdef Q_CC_MSVC -#define BLACK_DECLTYPE_AUTO auto -#define BLACK_TRAILING_RETURN(EXPR) -> decltype(EXPR) -#else -#define BLACK_DECLTYPE_AUTO decltype(auto) -#define BLACK_TRAILING_RETURN(EXPR) -#endif - -namespace BlackMisc -{ - namespace Private - { -#ifdef BLACK_HAS_CONSTEXPR_STDLIB - using std::tuple; - using std::tuple_size; - using std::get; - using std::make_tuple; -#else // Own implementation of tuple, because the one in GCC 4.9 is not constexpr. - template - struct tuple_part - { - constexpr tuple_part() {} - constexpr tuple_part(const T &element) : m_element(element) {} - T m_element; - }; - - template - struct tuple_impl; - template - struct tuple_impl, Ts...> : public tuple_part... - { - constexpr tuple_impl() {} - constexpr tuple_impl(const Ts &... vs) : tuple_part(vs)... {} - }; - - template - struct tuple : public tuple_impl, Ts...> - { - constexpr tuple() {} - constexpr tuple(const Ts &... vs) : tuple_impl, Ts...>(vs...) {} - constexpr static size_t c_size = sizeof...(Ts); - }; - - template - constexpr decltype(auto) get_impl(tuple_part &part) { return (part.m_element); } - template - constexpr decltype(auto) get_impl(tuple_part &&part) { return std::move(part.m_element); } - template - constexpr decltype(auto) get_impl(const tuple_part &part) { return (part.m_element); } - template - constexpr decltype(auto) get_impl(const tuple_part &&part) { return std::move(part.m_element); } - - template - constexpr decltype(auto) get(T &&tuple) { return get_impl(std::forward(tuple)); } - - template - struct tuple_size : public std::integral_constant {}; - - template - constexpr auto make_tuple(Ts &&... vs) { return tuple...>(std::forward(vs)...); } -#endif // ! BLACK_HAS_CONSTEXPR_STDLIB - } -} - -//! \endcond - -#endif diff --git a/src/blackmisc/network/client.cpp b/src/blackmisc/network/client.cpp index 1b97bd7b2..190d39e9c 100644 --- a/src/blackmisc/network/client.cpp +++ b/src/blackmisc/network/client.cpp @@ -11,7 +11,6 @@ #include "blackmisc/aviation/callsign.h" #include "blackmisc/compare.h" #include "blackmisc/icon.h" -#include "blackmisc/metaclassprivate.h" #include #include diff --git a/src/blackmisc/network/serverlist.cpp b/src/blackmisc/network/serverlist.cpp index 8fc9d59a2..341b20ffc 100644 --- a/src/blackmisc/network/serverlist.cpp +++ b/src/blackmisc/network/serverlist.cpp @@ -8,7 +8,6 @@ */ #include "blackmisc/network/serverlist.h" -#include "blackmisc/metaclassprivate.h" #include namespace BlackMisc diff --git a/src/blackmisc/network/textmessagelist.cpp b/src/blackmisc/network/textmessagelist.cpp index 34739d077..763e2659d 100644 --- a/src/blackmisc/network/textmessagelist.cpp +++ b/src/blackmisc/network/textmessagelist.cpp @@ -9,7 +9,6 @@ #include "blackmisc/network/textmessagelist.h" #include "blackmisc/iterator.h" -#include "blackmisc/metaclassprivate.h" #include "blackmisc/network/textmessage.h" #include "blackmisc/range.h" diff --git a/src/blackmisc/network/userlist.cpp b/src/blackmisc/network/userlist.cpp index 8a3d6d5cc..71af6a598 100644 --- a/src/blackmisc/network/userlist.cpp +++ b/src/blackmisc/network/userlist.cpp @@ -8,7 +8,6 @@ */ #include "blackmisc/network/userlist.h" -#include "blackmisc/metaclassprivate.h" #include #include diff --git a/src/blackmisc/simulation/aircraftmodel.h b/src/blackmisc/simulation/aircraftmodel.h index 1beeb2acb..2cca66232 100644 --- a/src/blackmisc/simulation/aircraftmodel.h +++ b/src/blackmisc/simulation/aircraftmodel.h @@ -21,7 +21,6 @@ #include "blackmisc/dictionary.h" #include "blackmisc/memotable.h" #include "blackmisc/metaclass.h" -#include "blackmisc/metaclassprivate.h" #include "blackmisc/orderable.h" #include "blackmisc/pixmap.h" #include "blackmisc/propertyindex.h" diff --git a/src/blackmisc/simulation/distributorlist.cpp b/src/blackmisc/simulation/distributorlist.cpp index 1611cf99e..647a3abec 100644 --- a/src/blackmisc/simulation/distributorlist.cpp +++ b/src/blackmisc/simulation/distributorlist.cpp @@ -10,7 +10,6 @@ #include "distributorlist.h" #include "simulatorinfo.h" #include "aircraftmodel.h" -#include "blackmisc/metaclassprivate.h" #include diff --git a/src/blackmisc/simulation/distributorlistpreferences.h b/src/blackmisc/simulation/distributorlistpreferences.h index 364cd8e8a..824be0b8f 100644 --- a/src/blackmisc/simulation/distributorlistpreferences.h +++ b/src/blackmisc/simulation/distributorlistpreferences.h @@ -16,7 +16,6 @@ #include "blackmisc/containerbase.h" #include "blackmisc/dictionary.h" #include "blackmisc/metaclass.h" -#include "blackmisc/metaclassprivate.h" #include "blackmisc/simulation/distributorlist.h" #include "blackmisc/simulation/simulatorinfo.h" #include "blackmisc/valueobject.h" diff --git a/src/blackmisc/simulation/fscommon/vpilotmodelruleset.h b/src/blackmisc/simulation/fscommon/vpilotmodelruleset.h index a670c014d..1399c7d9d 100644 --- a/src/blackmisc/simulation/fscommon/vpilotmodelruleset.h +++ b/src/blackmisc/simulation/fscommon/vpilotmodelruleset.h @@ -19,7 +19,6 @@ #include "blackmisc/blackmiscexport.h" #include "blackmisc/collection.h" #include "blackmisc/compare.h" -#include "blackmisc/metaclassprivate.h" #include "blackmisc/sequence.h" #include "blackmisc/simulation/aircraftmodellist.h" #include "blackmisc/simulation/fscommon/vpilotmodelrule.h" diff --git a/src/blackmisc/simulation/remoteaircraftproviderdummy.cpp b/src/blackmisc/simulation/remoteaircraftproviderdummy.cpp index 9f5036eb7..bda13368e 100644 --- a/src/blackmisc/simulation/remoteaircraftproviderdummy.cpp +++ b/src/blackmisc/simulation/remoteaircraftproviderdummy.cpp @@ -13,7 +13,6 @@ #include "blackmisc/collection.h" #include "blackmisc/compare.h" #include "blackmisc/dictionary.h" -#include "blackmisc/metaclassprivate.h" #include "blackmisc/propertyindexvariantmap.h" #include "blackmisc/variant.h" diff --git a/src/blackmisc/simulation/simulatedaircraft.cpp b/src/blackmisc/simulation/simulatedaircraft.cpp index ca5ddb5d0..ef424aa76 100644 --- a/src/blackmisc/simulation/simulatedaircraft.cpp +++ b/src/blackmisc/simulation/simulatedaircraft.cpp @@ -9,7 +9,6 @@ #include "blackmisc/aviation/aircrafticaocode.h" #include "blackmisc/comparefunctions.h" -#include "blackmisc/metaclassprivate.h" #include "blackmisc/pq/constants.h" #include "blackmisc/verify.h" #include "blackmisc/propertyindex.h" diff --git a/src/blackmisc/simulation/simulatedaircraftlist.cpp b/src/blackmisc/simulation/simulatedaircraftlist.cpp index 3ff5dff25..9779b0186 100644 --- a/src/blackmisc/simulation/simulatedaircraftlist.cpp +++ b/src/blackmisc/simulation/simulatedaircraftlist.cpp @@ -13,7 +13,6 @@ #include "blackmisc/aviation/airlineicaocode.h" #include "blackmisc/aviation/callsign.h" #include "blackmisc/compare.h" -#include "blackmisc/metaclassprivate.h" #include "blackmisc/network/user.h" #include "blackmisc/predicates.h" #include "blackmisc/range.h" diff --git a/src/blackmisc/weather/metarlist.h b/src/blackmisc/weather/metarlist.h index 1091ff56a..ef78560e8 100644 --- a/src/blackmisc/weather/metarlist.h +++ b/src/blackmisc/weather/metarlist.h @@ -16,7 +16,6 @@ #include "blackmisc/blackmiscexport.h" #include "blackmisc/collection.h" #include "blackmisc/compare.h" -#include "blackmisc/metaclassprivate.h" #include "blackmisc/sequence.h" #include "blackmisc/variant.h" #include "blackmisc/weather/metar.h" diff --git a/src/blackmisc/weather/weatherdataplugininfolist.cpp b/src/blackmisc/weather/weatherdataplugininfolist.cpp index 11a255183..eb76dcd8d 100644 --- a/src/blackmisc/weather/weatherdataplugininfolist.cpp +++ b/src/blackmisc/weather/weatherdataplugininfolist.cpp @@ -7,7 +7,6 @@ * contained in the LICENSE file. */ -#include "blackmisc/metaclassprivate.h" #include "blackmisc/range.h" #include "blackmisc/weather/weatherdataplugininfo.h" #include "blackmisc/weather/weatherdataplugininfolist.h"