Можно написать функцию, которая при компиляции компилятором 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()
{
//???
}