Skip to content

Commit 903d028

Browse files
Make data_type and name traits constexpr (#929)
* make constexpr Signed-off-by: Michael Carlstrom <rmc@carlstrom.com> * lint Signed-off-by: Michael Carlstrom <rmc@carlstrom.com> --------- Signed-off-by: Michael Carlstrom <rmc@carlstrom.com>
1 parent 12e9798 commit 903d028

5 files changed

Lines changed: 24 additions & 8 deletions

File tree

rosidl_generator_cpp/resource/action__traits.hpp.em

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,13 +59,13 @@ namespace rosidl_generator_traits
5959
{
6060

6161
template<>
62-
inline const char * data_type<@(action_typename)>()
62+
constexpr const char * data_type<@(action_typename)>()
6363
{
6464
return "@(action_typename)";
6565
}
6666

6767
template<>
68-
inline const char * name<@(action_typename)>()
68+
constexpr const char * name<@(action_typename)>()
6969
{
7070
return "@(action_fully_qualified_name)";
7171
}

rosidl_generator_cpp/resource/msg__traits.hpp.em

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -223,13 +223,13 @@ namespace rosidl_generator_traits
223223
{
224224

225225
template<>
226-
inline const char * data_type<@(message_typename)>()
226+
constexpr const char * data_type<@(message_typename)>()
227227
{
228228
return "@(message_typename)";
229229
}
230230

231231
template<>
232-
inline const char * name<@(message_typename)>()
232+
constexpr const char * name<@(message_typename)>()
233233
{
234234
return "@(message_fully_qualified_name)";
235235
}

rosidl_generator_cpp/resource/srv__traits.hpp.em

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,13 @@ namespace rosidl_generator_traits
2929
{
3030

3131
template<>
32-
inline const char * data_type<@(service_typename)>()
32+
constexpr const char * data_type<@(service_typename)>()
3333
{
3434
return "@(service_typename)";
3535
}
3636

3737
template<>
38-
inline const char * name<@(service_typename)>()
38+
constexpr const char * name<@(service_typename)>()
3939
{
4040
return "@(service_fully_qualified_name)";
4141
}

rosidl_generator_tests/test/rosidl_generator_cpp/test_traits.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
#include "rosidl_generator_tests/msg/w_strings.hpp"
2727
#include "rosidl_generator_tests/srv/empty.hpp"
2828

29+
using rosidl_generator_traits::name;
30+
using rosidl_generator_traits::data_type;
2931
using rosidl_generator_traits::is_message;
3032
using rosidl_generator_traits::is_service;
3133
using rosidl_generator_traits::is_service_request;
@@ -431,3 +433,17 @@ TEST(Test_rosidl_generator_traits, is_service) {
431433
EXPECT_FALSE(is_service_request<ServiceEvent>());
432434
EXPECT_FALSE(is_service_response<ServiceEvent>());
433435
}
436+
437+
constexpr bool streq(const char * a, const char * b)
438+
{
439+
while (*a && (*a == *b)) {
440+
++a;
441+
++b;
442+
}
443+
return *a == *b;
444+
}
445+
446+
static_assert(streq(name<rosidl_generator_tests::srv::Empty>(),
447+
"rosidl_generator_tests/srv/Empty"));
448+
static_assert(streq(data_type<rosidl_generator_tests::srv::Empty>(),
449+
"rosidl_generator_tests::srv::Empty"));

rosidl_runtime_cpp/include/rosidl_runtime_cpp/traits.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,10 +151,10 @@ inline void value_to_yaml(const std::u16string & value, std::ostream & out)
151151
}
152152

153153
template<typename T>
154-
inline const char * data_type();
154+
constexpr const char * data_type();
155155

156156
template<typename T>
157-
inline const char * name();
157+
constexpr const char * name();
158158

159159
template<typename T>
160160
struct has_fixed_size : std::false_type {};

0 commit comments

Comments
 (0)