﻿# V3540\. AUTOSAR\. There should be no implicit integral\-floating conversion\.

This diagnostic rule is based on the software development guidelines developed by [AUTOSAR](https://www.autosar.org/) \(AUTomotive Open System ARchitecture\)\.

The code should not contain implicit conversions from floating\-point types to integer types, and vice versa\.

Integer types are:

* 'signed char', 'unsigned char',
* 'short', 'unsigned short',
* 'int', 'unsigned int',
* 'long', 'unsinged long',
* 'long long', 'unsigned long long'\.

Floating\-point types are:

* 'float',
* 'double',
* 'long double'\.

Implicit conversion from floating\-point types to integer types may result in losing some part of the value \(for example, the decimal part\) or lead to undefined behavior if the floating\-point value cannot be represented as an integer value\.

Implicit conversion from integer types to floating\-point types may result in imprecise representation not meeting the developer's expectations\.

Example of non\-compliant code: 

```cpp
void foo1(int x, float y);
void foo2()
{
  float y = 10; 
  int x = 10.5;  
  foo1(y, x); 
}
```

Example of code considered compliant from the point of view of this diagnostic:

```cpp
void foo1(int x, float y);
void foo2()
{
  float y = static_cast<float>(10); 
  int x = static_cast<int>(10.5);  
  foo1(static_cast<int>(y), static_cast<float>(x)); 
}
```