Unexpected leftover from C hits back.

Code sample

1
2
3
4
5
6
7
8
9
#include <string>
#include <iostream>

int main()
{
  std::string x;
  x += ":" + 80;
  std::cout << x << "\n";
}

It should not compile (or at least it should give a warning). Yet it does; on my system it prints ā€˜iā€™. I rest my case.

Once you figure out what happens: I wonder if fundamentally this is caused by literals not being separate types, e.g. ":" is a const char(&)[2] which decays toconst char *, 80 is an int, rather than separate types from objects a or b as in const char * a; or int b;