@@ -2240,9 +2240,17 @@ struct test_location {
22402240
22412241struct test {
22422242 std::string_view type{};
2243+ std::optional<std::string> backingName;
22432244 std::string_view name{};
22442245 std::vector<std::string_view> tag{};
22452246
2247+ test (std::string_view t, std::string_view sv) : type(t), name(sv) {}
2248+ test (std::string_view t, const std::string& s) : type(t), name(s) {}
2249+ test (std::string_view t, const char * s) : type(t), name(s) {}
2250+ template <std::size_t N>
2251+ test (std::string_view t, const char (&s)[N]) : type(t), name(s) {}
2252+ test (std::string_view t, std::string&& s) : type(t), backingName(std::move(s)), name(*backingName) {}
2253+
22462254 template <class ... Ts>
22472255 constexpr auto operator =(test_location<void (*)()> _test) {
22482256 on<Ts...>(events::test<void (*)()>{.type = type,
@@ -3078,8 +3086,8 @@ struct suite {
30783086
30793087[[maybe_unused]] inline auto log = detail::log{};
30803088[[maybe_unused]] inline auto that = detail::that_{};
3081- [[maybe_unused]] constexpr auto test = [](const auto & name) {
3082- return detail::test{" test" , name};
3089+ [[maybe_unused]] constexpr auto test = [](auto & & name) {
3090+ return detail::test{" test" , std::forward< decltype ( name)>(name) };
30833091};
30843092[[maybe_unused]] constexpr auto should = test;
30853093[[maybe_unused]] inline auto tag = [](const auto & name) {
@@ -3139,20 +3147,20 @@ template <class T>
31393147}
31403148
31413149namespace bdd {
3142- [[maybe_unused]] constexpr auto feature = [](const auto & name) {
3143- return detail::test{" feature" , name};
3150+ [[maybe_unused]] constexpr auto feature = [](auto & & name) {
3151+ return detail::test{" feature" , std::forward< decltype ( name)>(name) };
31443152};
3145- [[maybe_unused]] constexpr auto scenario = [](const auto & name) {
3146- return detail::test{" scenario" , name};
3153+ [[maybe_unused]] constexpr auto scenario = [](auto & & name) {
3154+ return detail::test{" scenario" , std::forward< decltype ( name)>(name) };
31473155};
3148- [[maybe_unused]] constexpr auto given = [](const auto & name) {
3149- return detail::test{" given" , name};
3156+ [[maybe_unused]] constexpr auto given = [](auto & & name) {
3157+ return detail::test{" given" , std::forward< decltype ( name)>(name) };
31503158};
3151- [[maybe_unused]] constexpr auto when = [](const auto & name) {
3152- return detail::test{" when" , name};
3159+ [[maybe_unused]] constexpr auto when = [](auto & & name) {
3160+ return detail::test{" when" , std::forward< decltype ( name)>(name) };
31533161};
3154- [[maybe_unused]] constexpr auto then = [](const auto & name) {
3155- return detail::test{" then" , name};
3162+ [[maybe_unused]] constexpr auto then = [](auto & & name) {
3163+ return detail::test{" then" , std::forward< decltype ( name)>(name) };
31563164};
31573165
31583166namespace gherkin {
@@ -3283,11 +3291,11 @@ class steps {
32833291} // namespace bdd
32843292
32853293namespace spec {
3286- [[maybe_unused]] constexpr auto describe = [](const auto & name) {
3287- return detail::test{" describe" , name};
3294+ [[maybe_unused]] constexpr auto describe = [](auto & & name) {
3295+ return detail::test{" describe" , std::forward< decltype ( name)>(name) };
32883296};
3289- [[maybe_unused]] constexpr auto it = [](const auto & name) {
3290- return detail::test{" it" , name};
3297+ [[maybe_unused]] constexpr auto it = [](auto & & name) {
3298+ return detail::test{" it" , std::forward< decltype ( name)>(name) };
32913299};
32923300} // namespace spec
32933301
0 commit comments