.. title:: clang-tidy - google-explicit-constructor google-explicit-constructor =========================== Checks that constructors callable with a single argument and conversion operators are marked explicit to avoid the risk of unintentional implicit conversions. Consider this example: .. code-block:: c++ struct S { int x; operator bool() const { return true; } }; bool f() { S a{1}; S b{2}; return a == b; } The function will return ``true``, since the objects are implicitly converted to ``bool`` before comparison, which is unlikely to be the intent. The check will suggest inserting ``explicit`` before the constructor or conversion operator declaration. However, copy and move constructors should not be explicit, as well as constructors taking a single ``initializer_list`` argument. This code: .. code-block:: c++ struct S { S(int a); explicit S(const S&); operator bool() const; ... will become .. code-block:: c++ struct S { explicit S(int a); S(const S&); explicit operator bool() const; ... See https://google.github.io/styleguide/cppguide.html#Explicit_Constructors