diff --git a/common/array.h b/common/array.h index 461f2ffc862..ceba46bc434 100644 --- a/common/array.h +++ b/common/array.h @@ -26,7 +26,6 @@ #include "common/algorithm.h" #include "common/textconsole.h" // For error() #include "common/memory.h" -#include "common/initializer_list.h" namespace Common { diff --git a/common/initializer_list.h b/common/initializer_list.h deleted file mode 100644 index 024215c96a3..00000000000 --- a/common/initializer_list.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef COMMON_INITIALIZER_LIST_H -#define COMMON_INITIALIZER_LIST_H - -// Some compiler only have partial support for C++11 and we provide replacements for reatures not available. -#ifdef NO_CXX11_INITIALIZER_LIST -namespace std { - template class initializer_list { - public: - typedef T value_type; - typedef const T& reference; - typedef const T& const_reference; - typedef size_t size_type; - typedef const T* iterator; - typedef const T* const_iterator; - - constexpr initializer_list() noexcept = default; - constexpr size_t size() const noexcept { return m_size; }; - constexpr const T* begin() const noexcept { return m_begin; }; - constexpr const T* end() const noexcept { return m_begin + m_size; } - - private: - // Note: begin has to be first or the compiler gets very upset - const T* m_begin = { nullptr }; - size_t m_size = { 0 }; - - // The compiler is allowed to call this constructor - constexpr initializer_list(const T* t, size_t s) noexcept : m_begin(t) , m_size(s) {} - }; - - template constexpr const T* begin(initializer_list il) noexcept { - return il.begin(); - } - - template constexpr const T* end(initializer_list il) noexcept { - return il.end(); - } -} - -#else - -#include - -#endif // NO_CXX11_INITIALIZER_LIST - -#endif // COMMON_INITIALIZER_LIST_H diff --git a/common/scummsys.h b/common/scummsys.h index 10384dc73d1..0bf4a262b05 100644 --- a/common/scummsys.h +++ b/common/scummsys.h @@ -504,6 +504,50 @@ namespace std { } #endif +// +// std::initializer_list +// Provide replacement when not available +// +#if defined(NO_CXX11_INITIALIZER_LIST) +namespace std { + template class initializer_list { + public: + typedef T value_type; + typedef const T &reference; + typedef const T &const_reference; + typedef size_t size_type; + typedef const T *iterator; + typedef const T *const_iterator; + + constexpr initializer_list() noexcept = default; + constexpr size_t size() const noexcept { return _size; }; + constexpr const T *begin() const noexcept { return _begin; }; + constexpr const T *end() const noexcept { return _begin + _size; } + + private: + // Note: begin has to be first or the compiler may get very upset + const T *_begin = { nullptr }; + size_t _size = { 0 }; + + // The compiler is allowed to call this constructor + constexpr initializer_list(const T* t, size_t s) noexcept : _begin(t) , _size(s) {} + }; + + template constexpr const T* begin(initializer_list il) noexcept { + return il.begin(); + } + + template constexpr const T* end(initializer_list il) noexcept { + return il.end(); + } +} + +#else + +#include + +#endif // NO_CXX11_INITIALIZER_LIST + #include "common/forbidden.h" #endif diff --git a/engines/ags/lib/std/initializer_list.h b/engines/ags/lib/std/initializer_list.h index 4aad91d3b49..efe34c83d5a 100644 --- a/engines/ags/lib/std/initializer_list.h +++ b/engines/ags/lib/std/initializer_list.h @@ -23,7 +23,6 @@ #define AGS_STD_INITIALIZER_LIST_H #include "common/scummsys.h" -#include "common/initializer_list.h" namespace AGS3 { namespace std { diff --git a/engines/ags/lib/std/vector.h b/engines/ags/lib/std/vector.h index d46b84023f2..57f0c65d2f8 100644 --- a/engines/ags/lib/std/vector.h +++ b/engines/ags/lib/std/vector.h @@ -27,7 +27,6 @@ #include "common/scummsys.h" #include "common/algorithm.h" #include "common/memory.h" -#include "common/initializer_list.h" namespace AGS3 { namespace std {