fcb6beb3e8
`std::size_t` is `unsigned int` on i686-pc-linux-gnu, but is `unsigned long` on x86_64-pc-linux-gnu. This mismatch allows d_array<E = std::size_t> to be well-formed on x86_64, but trigger a duplicate definition of operator[](E) on i686. Add a requires() check that forbids both types for E, so that code which would break the i686 build is also diagnosed in the x86_64 build.
19 lines
506 B
C++
19 lines
506 B
C++
/*
|
|
* This file is part of the DXX-Rebirth project <https://www.dxx-rebirth.com/>.
|
|
* It is copyright by its individual contributors, as recorded in the
|
|
* project's Git history. See COPYING.txt at the top level for license
|
|
* terms and a link to the Git history.
|
|
*/
|
|
|
|
#pragma once
|
|
#include <cstddef>
|
|
#include <type_traits>
|
|
|
|
namespace dcx {
|
|
|
|
template <typename T, std::size_t N, typename E>
|
|
requires(!std::is_same<unsigned, E>::value && !std::is_same<unsigned long, E>::value)
|
|
struct enumerated_array;
|
|
|
|
}
|