@@ -21,7 +21,7 @@ namespace mrpt
2121{
2222namespace typemeta
2323{
24- template <int N>
24+ template <std:: size_t N>
2525class string_literal
2626{
2727 const char (&_lit)[N + 1];
@@ -30,13 +30,13 @@ class string_literal
3030 /* * Ctor from C string literal, with trailing zero. */
3131 constexpr string_literal (const char (&lit)[N + 1]) : _lit((MRPT_X_ASSERT(lit[N] == ' \0 ' ), lit)) {}
3232 constexpr std::size_t size () const { return N; }
33- constexpr char operator [](int i) const { return MRPT_X_ASSERT (i >= 0 && i < N), _lit[i]; }
33+ constexpr char operator [](std:: size_t i) const { return MRPT_X_ASSERT (i < N), _lit[i]; }
3434 constexpr const char * c_str () const { return _lit; }
3535 constexpr operator const char *() const { return _lit; }
3636 operator std::string () const { return _lit; }
3737};
3838
39- template <int N_PLUS_1>
39+ template <std:: size_t N_PLUS_1>
4040constexpr auto literal (const char (&lit)[N_PLUS_1]) -> string_literal<N_PLUS_1 - 1>
4141{
4242 return string_literal<N_PLUS_1 - 1 >(lit);
@@ -47,7 +47,7 @@ constexpr auto literal(const char (&lit)[N_PLUS_1]) -> string_literal<N_PLUS_1 -
4747namespace internal
4848{
4949// the type used to receive the pack
50- template <int ... I>
50+ template <std:: size_t ... I>
5151struct sequence
5252{
5353};
@@ -57,18 +57,18 @@ struct sequence
5757template <typename T>
5858struct append ;
5959
60- template <int ... I>
60+ template <std:: size_t ... I>
6161struct append <sequence<I...>>
6262{
6363 using type = sequence<I..., sizeof ...(I)>;
6464};
6565
6666// recursive implementation of make_sequence
6767
68- template <int I>
68+ template <std:: size_t I>
6969struct make_sequence_ ;
7070
71- template <int I>
71+ template <std:: size_t I>
7272using make_sequence = typename make_sequence_<I>::type;
7373
7474template <>
@@ -77,19 +77,19 @@ struct make_sequence_<0> // recursion end
7777 using type = sequence<>;
7878};
7979
80- template <int I>
80+ template <std:: size_t I>
8181struct make_sequence_ : append<make_sequence<I - 1 >>
8282{
8383 static_assert (I >= 0 , " negative size" );
8484};
8585} // namespace internal
8686
87- template <int N>
87+ template <std:: size_t N>
8888class array_string
8989{
9090 char _array[N + 1 ];
9191
92- template <typename S1, typename S2, int ... PACK1, int ... PACK2>
92+ template <typename S1, typename S2, std:: size_t ... PACK1, std:: size_t ... PACK2>
9393 constexpr array_string (
9494 const S1& s1, const S2& s2, internal::sequence<PACK1...>, internal::sequence<PACK2...>) :
9595 _array{s1[PACK1]..., s2[PACK2]..., ' \0 ' }
@@ -98,48 +98,48 @@ class array_string
9898
9999 public:
100100 /* * ctor: literal + literal */
101- template <int N1, REQUIRES(N1 <= N)>
101+ template <std:: size_t N1, REQUIRES(N1 <= N)>
102102 constexpr array_string (const string_literal<N1>& s1, const string_literal<N - N1>& s2) :
103103 array_string{s1, s2, internal::make_sequence<N1>{}, internal::make_sequence<N - N1>{}}
104104 {
105105 }
106106
107107 /* * ctor: string + literal */
108- template <int N1, REQUIRES(N1 <= N)>
108+ template <std:: size_t N1, REQUIRES(N1 <= N)>
109109 constexpr array_string (const array_string<N1>& s1, const string_literal<N - N1>& s2) :
110110 array_string{s1, s2, internal::make_sequence<N1>{}, internal::make_sequence<N - N1>{}}
111111 {
112112 }
113113
114114 /* * ctor: string + string */
115- template <int N1, REQUIRES(N1 <= N)>
115+ template <std:: size_t N1, REQUIRES(N1 <= N)>
116116 constexpr array_string (const array_string<N1>& s1, const array_string<N - N1>& s2) :
117117 array_string{s1, s2, internal::make_sequence<N1>{}, internal::make_sequence<N - N1>{}}
118118 {
119119 }
120120
121121 constexpr std::size_t size () const { return N; }
122- constexpr char operator [](int i) const { return MRPT_X_ASSERT (i >= 0 && i < N), _array[i]; }
122+ constexpr char operator [](std:: size_t i) const { return MRPT_X_ASSERT (i < N), _array[i]; }
123123 constexpr const char * c_str () const { return _array; }
124124 constexpr operator const char *() const { return c_str (); }
125125 operator std::string () const { return c_str (); }
126126};
127127
128- template <int N1, int N2>
128+ template <std:: size_t N1, std:: size_t N2>
129129constexpr auto operator +(const string_literal<N1>& s1, const string_literal<N2>& s2)
130130 -> array_string<N1 + N2>
131131{
132132 return array_string<N1 + N2>(s1, s2);
133133}
134134
135- template <int N1, int N2>
135+ template <std:: size_t N1, std:: size_t N2>
136136constexpr auto operator +(const array_string<N1>& s1, const string_literal<N2>& s2)
137137 -> array_string<N1 + N2>
138138{
139139 return array_string<N1 + N2>(s1, s2);
140140}
141141
142- template <int N1, int N2>
142+ template <std:: size_t N1, std:: size_t N2>
143143constexpr auto operator +(const array_string<N1>& s1, const array_string<N2>& s2)
144144 -> array_string<N1 + N2>
145145{
0 commit comments