|
|
|
|
|
by ambrop7
3378 days ago
|
|
I suspect the issue is that variant<int,char> is not trivially copy constructible (at least when I tested on godbolt), so the ABI believes it is not allowed to pass the object by value. (this is a guess only, correct me if you know better!) Now why it is not trivially copy constructible is another question. But the latest standard draft does not require it [variant.ctor] though it does require the destructor to be trivial if all type destructors are trivial [variant.dtor]. The GCC implementation also seems to ensure only trivial destructor not copy constructor (the code is here [1] if anyone likes to see). EDIT: I did a small experiment that agrees with this - adding a copy constructor causes passing by pointer.
https://godbolt.org/g/UG0YXJ EDIT2: I filed a bug report for gcc, https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80187 [1] https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-... |
|