При портировании кода на линукс столкнулся с проблемой
От: gwg-605 Россия  
Дата: 09.08.19 10:46
Оценка: -1 :)))
Портирую код с винды на линукс/мак.

template<typename TYPE>
class ttt {
public:
    ttt() {
        m_Pointer = "<null>" ;
    }

    ttt( const ttt<TYPE>& src ) {
        m_Pointer = src.m_Pointer ;
    }

    const TYPE* m_Pointer ;
};
void main() {
    ttt<char> c0 ;
    c0.m_Pointer = "Hello World!!!" ;
    printf( "%u--%s--%u", 0x55, c0, 0xAA ) ;
}

GCC передает не копию лежащего в c0, а указатель на c0, и получается полный алес! Если же убрать копи конструктор из декларации класса, то замечательно передается копия и все работает. Причем GCC сам генерит копи конструктор, который и вызывает. При моем копи конструкторе даже упоминания нет.

Вторая проблема с clang, он компилирует код с -Wno-error=non-pod-varargs, но вставляет ud2 (invalid opcode) перед сгенерированным кодом, те мы сделали что ты просил, но фиг ты это запустишь. Это можно как-то обойти?

ЗЫ. Все эксперименты проводились при выключенных оптимизациях.
ЗЫЫ. здесь можно поэксперементировать: https://godbolt.org/z/-PMwXh
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.