Лямбда со структурированными привязками внутри макроса вызоваC++

Программы на C++. Форум разработчиков
Anonymous
Лямбда со структурированными привязками внутри макроса вызова

Сообщение Anonymous »

Это может быть связано с тем, как правильно направить структурированные аргументы привязки на макросе, но я чувствую, что реальная проблема не такая же, поэтому может иметь другое решение. < /p>
Я хочу Чтобы пройти лямбду в качестве генератора имен внутри instantiate_test_test_suite_p. Это хорошо работает, пока я не попытаюсь использовать структурированные привязки, чья запятая заставляет препроцессор думать, что оно разделяется на отдельные аргументы. < /P>
using param = std::tuple;

// This works
INSTANTIATE_TEST_SUITE_P(
instance, suite, cases,
[](const testing::TestParamInfo
& info) {
return std::string(std::get(info.param)
+ "_to_" + std::string(std::get(info.param));
}
);

// This also works
static constexpr auto name = [](const testing::TestParamInfo& info) {
const auto [a, b] = info.param;
return std::string(a) + "_to_" + std::to_string(b);
};

INSTANTIATE_TEST_SUITE_P(
instance, suite, cases, name
);

// But this does not compile
INSTANTIATE_TEST_SUITE_P(
instance, suite, cases,
[](const testing::TestParamInfo& info) {
const auto [a, b] = info.param;
return std::string(a) + "_to_" + std::to_string(b);
}
);
< /code>
Я знаю, что в некоторых случаях, например, шаблонные аргументы, запятая может быть защищена от препроцессора дополнительным набором скобок. Можно ли сделать то же самое здесь? Я пытался разместить скобки вокруг структурированного связывания, но оно тоже не компилировало.


Подробнее здесь: https://stackoverflow.com/questions/794 ... macro-call

Вернуться в «C++»