Какие различия, если они есть, между C ++ 03 и C ++ 11 могут быть обнаружены во время выполнения?

Можно написать функцию, которая при компиляции компилятором C вернет 0, и при компиляции компилятором C ++ вернет 1 (тривиальное решение с #ifdef __cplusplus не интересно).

Например:

int isCPP()
{
    return sizeof(char) == sizeof 'c';
}

Конечно, приведенное выше будет работать, только если sizeof (char) не совпадает с sizeof (int)

Другое, более портативное решение - что-то вроде этого:

int isCPP()
{
    typedef int T;
    {
       struct T 
       {
           int a[2];
       };
       return sizeof(T) == sizeof(struct T);
    }
}

Я не уверен, что примеры на 100% верны, но идею вы поняли. Я считаю, что есть и другие способы написать ту же функцию.

Какие различия, если таковые имеются, между C ++ 03 и C ++ 11 могут быть обнаружены во время выполнения? Другими словами, можно ли написать аналогичную функцию, которая возвращала бы логическое значение, указывающее, компилируется ли она соответствующим компилятором C ++ 03 или компилятором C ++ 11?

bool isCpp11()
{ 
    //???
} 
116
задан Destructor 9 December 2016 в 04:41
поделиться