Действительно ли Ideone и Codepad не поддерживают C ++ 03? - PullRequest
7 голосов
/ 08 ноября 2010

Мой вопрос связан с Prasoon вопросом о не POD-типах и инициализации значений.

Я пробовал следующий код на онлайн-компиляторах, таких как Ideone и Codepadно исполняемые файлы выдавали ошибку времени выполнения на обоих сайтах.

#include <iostream>
#include <cassert>

struct Struct {
    std::string String;
    int Int;
    bool k;
};

struct InStruct:Struct
{
   InStruct():Struct(){}
};

int main()
{
   InStruct i;
   assert ( i.Int == 0);
   std::cout << "Hello";
}

Идеальный вывод здесь
Вывод кодовой панели здесь

Означает ли этоНи один из них не поддерживает функцию инициализации значения C ++ 03?

Ответы [ 3 ]

4 голосов
/ 08 ноября 2010

Значит ли это, что ни один из них не поддерживает функцию инициализации значения C ++ 03?

Да.

До версии 4.4 GCC не полностью поддерживал инициализацию значения ( заголовок совместимости Boost GCC объясняет это и имеет ссылки на соответствующие отчеты о дефектах GCC; см. Строку 77).

Если ваш код должен быть переносимым, вы должны быть очень осторожны, полагаясь на инициализацию значения; GCC не поддерживал его полностью до недавнего времени, и Visual C ++ не полностью поддерживает его даже в его последней версии, Visual C ++ 2010.

0 голосов
/ 07 декабря 2010

Попробуйте это сейчас! - Ideone поддерживает GCC-4.5.1

0 голосов
/ 08 ноября 2010

Декларация

InStruct i; 

не вызывает инициализацию значения

$ 8.5.3 / 10 - «Объект, чей инициализатор является пустым набором круглые скобки, то есть, (), должны быть значение инициализации. "

Если вы хотите инициализировать значение, вам потребуется выражение что-то вроде

assert(InStruct().Int == 0);
...