Действительно ли Ideone и Codepad не поддерживают C++03?

Мой вопрос связан с вопросом Prasoon Saurav о не 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";
}

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

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

3 ответа

Решение

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

Да.

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

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

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

Декларация

InStruct i; 

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

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

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

assert(InStruct().Int == 0);
Другие вопросы по тегам