инициализация статического std :: initializer_list вызывает предупреждение VS2015 об обновлении 3 C4592 - PullRequest
0 голосов
/ 08 октября 2019

Мне нужен статический 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

...