No . You have undefined features.
Here is a counterexample that UB creates when assigning a negated unsigned intto int:
unsigned u = (unsigned)std::numeric_limits<int>::max() - 1;
std::cout << "max int" << std::numeric_limits<int>::max() << '\n';
std::cout << "as unsigned - 1" << u << '\n';
std::cout << "negated:" << -u << '\n';
std::cout << std::boolalpha << ( std::numeric_limits<int>::max() < -u ) << '\n';
int s = -u;
std::cout << s << '\n';
:
int 2'147'483'647, unsigned int 2'147'483'650; , int. , - undefined. , .
(2016-07-12: N4604) :
, . [: , , . - ]
{} -style, :
unsigned a = 5;
std::cout << -a << '\n';
int b{ -a };
std::cout << b << '\n';
return 0;
, , -a , int, .
:
undefined ++?
C, ++:
, ?
:
http://en.cppreference.com/w/cpp/language/implicit_conversion