Мне нужен статический std :: initializer_list для параметризации моего шаблона gtest. Так что для любого тестируемого типа мне нужно инициализировать элемент приспособления, как показано ниже (последняя строка):
template <typename T>
class ExampleTemplatedUnitTest : public ::testing::Test {
protected:
static std::initializer_list<typename T::value_type> initializers;
};
TYPED_TEST_CASE_P(ExampleTemplatedUnitTest);
TYPED_TEST_P(ExampleTemplatedUnitTest, exampleTest) {
for (auto p : ExampleTemplatedUnitTest<TypeParam>::initializers)
printf("p = %d", p);
}
REGISTER_TYPED_TEST_CASE_P(ExampleTemplatedUnitTest, exampleTest);
typedef ::testing::Types<
std::vector<int>
> testedTypes;
INSTANTIATE_TYPED_TEST_CASE_P(value, ExampleTemplatedUnitTest, testedTypes);
std::initializer_list<int> ExampleTemplatedUnitTest<std::vector<int>>::initializers = { 1,2 };
Однако выдается следующее предупреждение:
unit_test.cpp(502): warning C4592: 'initializers': symbol will be dynamically initialized (implementation limitation)
Я нашел этот вопрос: ошибка C4592: символ будет динамически инициализирован. VS2015.1 static const std :: vector field и много других тем, но все это касается ошибки в обновлении 1.
Таким образом, я все еще не могу понять, что я делаю неправильно? Должен ли я игнорировать и отключить это предупреждение или есть способ, как это исправить? Испытание проходит и ведет себя именно так, как я хочу. (В реальных тестах я использую этот статический список инициализации, чтобы фактически инициализировать объекты конструкторами с помощью std :: initializer_list, приведенный выше код является просто сокращенным примером)
Я давно использовал эту параметризацию типизированной методики тестированияи не сталкивался с этим, но это впервые с std :: initializer_list