Bonjour à tous,

J'ai un problème confirmé avec le code ci-dessous, l'addition de deux int16_t me renvoi un int! Est-ce que c'est un comportement normal? Parce que du coup je suis obligé d'employer un static_cast sur le résultat car sinon je prends des warnings de gcc.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
 
template<typename T>
struct f{
    static constexpr const char *str = "unknown"; };
 
 
template<>
struct f<int>{
    static constexpr const char *str = "int"; };
 
 
template<>
struct f<int16_t>{
    static constexpr const char *str = "int16_t"; };
 
 
 
int main(){
    std::cout << f<double>::str << std::endl;
    std::cout << f<int16_t>::str << std::endl;
 
 
    int16_t a(0), b(0);
    std::cout << f< decltype(a+b) >::str << std::endl;
}
Et si dessous la sortie :

Merci beaucoup d'avance !