# Extra Clang Tools 7 documentation

## clang-tidy - cppcoreguidelines-narrowing-conversions

# cppcoreguidelines-narrowing-conversions

Checks for silent narrowing conversions, e.g: `int i = 0; i += 0.1;`. While the issue is obvious in this former example, it might not be so in the following: `void MyClass::f(double d) { int_member_ += d; }`.

This rule is part of the “Expressions and statements” profile of the C++ Core Guidelines, corresponding to rule ES.46. See

https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Res-narrowing.

We enforce only part of the guideline, more specifically, we flag:
  - All floating-point to integer conversions that are not marked by an explicit cast (c-style or `static_cast`). For example: `int i = 0; i += 0.1;`, `void f(int); f(0.1);`,
  - All applications of binary operators where the left-hand-side is an integer and the right-hand-size is a floating-point. For example: `int i; i+= 0.1;`.