cppcheck против clang-tidy: конструктор эксплицита initializer_list

Когда я запускаю инструменты clang-tidy-3.8 и cppcheck-1.72, под следующим код:

#include <initializer_list>
#include <string>
#include <iostream>

using string_list = std::initializer_list<std::string>;

class Foo {
public:
explicit Foo(const string_list& strings) {
for (const auto& ss : strings) {
std::cout << ss << std::endl;
}
}
};

Выводы clang-tidy-3.8:

$> clang-tidy -checks = ‘*’ main.cpp — -std = c ++ 11

предупреждение: конструктор списка инициализаторов не должен объявляться явным образом [google-явный-конструктор] явный Foo (const string_list& строки)

Однако если я Удалить ключевое слово явный, cppcheck-1.72 сообщает:

$> cppcheck main.cpp —language = c ++ —std = c ++ 11 —enable = all

(стиль) Класс ‘Foo’ имеет конструктор с 1 аргументом, который не является явным.

Я читаю в Руководство Google Cpp:

Конструкторы, которые нельзя вызывать с одним аргументом, обычно должны опускаться явным образом. Конструкторы, которые принимают один параметр std :: initializer_list, также должны опускать явный, чтобы поддерживать инициализацию копирования (например, MyType m = {1, 2};).

Какой инструмент правильный
в соответствии со стандартом C ++?

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]