diff --git a/rclcpp/include/rclcpp/function_traits.hpp b/rclcpp/include/rclcpp/function_traits.hpp index 16768d7..39b2a71 100644 --- a/rclcpp/include/rclcpp/function_traits.hpp +++ b/rclcpp/include/rclcpp/function_traits.hpp @@ -83,7 +83,7 @@ template> #elif defined _GLIBCXX_RELEASE // glibc++ (GNU C++ >= 7.1) -struct function_traits> +struct function_traits> #elif defined __GLIBCXX__ // glibc++ (GNU C++) struct function_traits(FArgs ...)>> #elif defined _MSC_VER // MS Visual Studio diff --git a/rclcpp/test/test_function_traits.cpp b/rclcpp/test/test_function_traits.cpp index 3121bda..4e09b08 100644 --- a/rclcpp/test/test_function_traits.cpp +++ b/rclcpp/test/test_function_traits.cpp @@ -706,3 +706,23 @@ TEST(TestFunctionTraits, sfinae_match) { EXPECT_EQ("foo", func_accept_callback_return_type(lambda_no_args_string)); } + +class TestMember : public ::testing::Test +{ +public: + void MemberFunctor(int, float, std::string) {} +}; + +/* + Regression test for https://github.com/ros2/rclcpp/issues/479, specific to classes using the + TEST_F GTest macro. +*/ +TEST_F(TestMember, bind_member_functor) { + auto bind_member_functor = std::bind(&TestMember::MemberFunctor, this, std::placeholders::_1, + std::placeholders::_2, std::placeholders::_3); + + static_assert( + rclcpp::function_traits::check_arguments::value, + "Functor accepts an int, a float and a string as arguments"); +}