#pragma once // // This file is distributed under the MIT License. See LICENSE.md for details. // #include #include #include template concept convertible_to = std::is_convertible_v; template concept NotVoid = not std::is_void_v; template concept DerivesFrom = std::is_base_of_v; template concept ConstOrNot = std::is_same_v or std::is_same_v; template concept Integral = std::is_integral_v; // clang-format off namespace ranges { template concept range = requires(T &R) { std::begin(R); std::end(R); }; template concept sized_range = ranges::range && requires(T &R) { std::size(R); }; } // namespace ranges // clang-format off