constructor delegation
-
Hey,
folgendes minimalbsp. compiliert nicht:
struct foo { foo( unsigned char a ) {} foo( long a ) : foo(unsigned char(a)) {} // mit C-cast funktioniert es: // foo( long a ) : foo((unsigned char)(a)) {} }; int main() {}
g++ sagt:
In constructor ‘foo::foo(long int)’: error: expected primary-expression before ‘unsigned’ foo( long a ) : foo(unsigned char(a)) {} ^~~~~~~~
Hat zwar nichts zu sagen, aber:
- MSVC sagt OK.
- Im Standard habe ich nix dazu gefunden (12.6.2.6).
Bug im g++?
bb
-
Bug im g++?
Spontan: ja. Beide Schreibweisen machen das Gleiche. Funktioniert es mit char (ohne unsigned)?
Ein long in ein char zu pressen ist allerdings auch mutig ...
-
@manni66 sagte in constructor delegation:
Spontan: ja. Beide Schreibweisen machen das Gleiche. Funktioniert es mit char (ohne unsigned)?
Wenn der Typ nur 1 Wort lang ist, klappt es immer. sobald ein signed/unsigned davor steht nicht mehr.
@manni66 sagte in constructor delegation:
Ein long in ein char zu pressen ist allerdings auch mutig ...
Danke für deinen Hinweis
bb
-
Kein Bug. Ein Function-Style-Cast funktioniert mehr oder weniger nur mit Typen, die als 1 Wort geschrieben werden können. Insbesondere also nicht
unsigned char
. Kann man im Standard unter 8.2.3 (C++17 Draft) oder bei https://en.cppreference.com/w/cpp/language/explicit_cast nachlesen.