libsemigroups  v3.3.0
C++ library for semigroups and monoids
Loading...
Searching...
No Matches
is_specialization_of.hpp
1//
2// libsemigroups - C++ library for semigroups and monoids
3// Copyright (C) 2025 James D. Mitchell
4//
5// This program is free software: you can redistribute it and/or modify
6// it under the terms of the GNU General Public License as published by
7// the Free Software Foundation, either version 3 of the License, or
8// (at your option) any later version.
9//
10// This program is distributed in the hope that it will be useful,
11// but WITHOUT ANY WARRANTY; without even the implied warranty of
12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13// GNU General Public License for more details.
14//
15// You should have received a copy of the GNU General Public License
16// along with this program. If not, see <http://www.gnu.org/licenses/>.
17//
18
19// This file contains the struct is_specialization_of and the alias
20// is_specialization_of_v.
21
22// TODO(v4): rename this file to use "-" and not "_" for consistency!
23
24#ifndef LIBSEMIGROUPS_IS_SPECIALIZATION_OF_HPP_
25#define LIBSEMIGROUPS_IS_SPECIALIZATION_OF_HPP_
26
27#include <type_traits> // for true_type
28
29namespace libsemigroups {
55 // From https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p2098r0.pdf
56 template <typename Thing, template <typename...> typename Primary>
58
60 template <template <typename...> typename Primary, typename... Args>
61 struct is_specialization_of<Primary<Args...>, Primary> : std::true_type {};
62
82 template <typename Thing, template <typename...> typename Primary>
83 inline constexpr bool is_specialization_of_v
85} // namespace libsemigroups
86
87#endif // LIBSEMIGROUPS_IS_SPECIALIZATION_OF_HPP_
constexpr bool is_specialization_of_v
Helper variable template for is_specialization_of.
Definition is_specialization_of.hpp:84
Namespace for everything in the libsemigroups library.
Definition action.hpp:44
Struct for checking if a template parameter is a specialization of another.
Definition is_specialization_of.hpp:57