3
3
#include < concepts>
4
4
#include < cstddef>
5
5
#include < array>
6
- namespace klibrary ::linear_algebra {
7
- // 添え字に使用する型の定義
6
+ #include < optional>
7
+ // 実装内のみで使用される型やコンセプト
8
+ namespace klibrary ::linear_algebra::alias_and_concepts {
8
9
using SizeT = std::size_t ;
9
- // 浮動小数点型の定義
10
+
10
11
template <class T >
11
12
concept FloatingPoint = std::is_floating_point_v<T>;
12
- // 配列型の定義
13
+
13
14
template <class ElemT , SizeT size>
14
15
using Array = std::array<ElemT, size>;
15
- // T, Uから変換可能な共通の型が存在するか
16
+
16
17
template <class T , class U >
17
18
concept HasCommonTypeWith = std::common_with<T, U>;
18
- // T, Uから変換可能な共通の型を返す
19
+
19
20
template <class T , class U >
20
21
using CommonTypeOf = std::common_type<T, U>::type;
21
- // FromからToに変換可能であるか
22
+
22
23
template <class From , class To >
23
24
concept IsConvertibleTo = std::convertible_to<From, To>;
24
- // 加算は定義されているか
25
+
25
26
template <class Operand_L , class Operand_R >
26
27
concept IsAdditionDefined = requires (Operand_L a, Operand_R b) {
27
28
{a + b};
28
29
};
29
- // 減算は定義されているか
30
+
30
31
template <class Operand_L , class Operand_R >
31
32
concept IsSubtractionDefined = requires (Operand_L a, Operand_R b) {
32
33
{a - b};
33
34
};
34
- // 乗算は定義されているか
35
+
35
36
template <class Operand_L , class Operand_R >
36
37
concept IsMultiplicationDefined = requires (Operand_L a, Operand_R b) {
37
38
{a * b};
38
39
};
39
- // 除算は定義されているか
40
+
40
41
template <class Operand_L , class Operand_R >
41
42
concept IsDivisionDefined = requires (Operand_L a, Operand_R b) {
42
43
{a / b};
43
44
};
44
45
}
46
+ // ユーザーが使用可能な型やコンセプト
47
+ namespace klibrary ::linear_algebra {
48
+ template <class T >
49
+ using Infinity = std::optional<T>::nullopt_t ;
50
+ }
45
51
#endif // staticmatrix_alias_and_concepts_hpp
0 commit comments