portable - ¿Cómo puedo compilar el código C++ 11 con Orwell Dev-C++?
dev c++ portable (1)
Asegúrese de proporcionar el indicador correcto -std al compilar. La configuración predeterminada que usa Orwell Dev-C ++ (no pasa ninguna opción -std), no habilitará algunas nuevas funciones relucientes de C ++ 11, como unique_ptr. La solución es bastante simple:
- Para compilaciones que no sean de proyecto, vaya a: Herramientas >> Opciones de compilación >> (seleccione su compilador) >> Configuración >> Generación de código >> (establezca ''Estándar de idioma'' en una opción de C ++ 11)
- Para compilaciones de proyectos, vaya a: Proyecto >> Compilador >> Generación de código >> (establezca ''Estándar de idioma'' a una opción de C ++ 11)
Aquí hay un poco más de información sobre el indicador -std: http://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html#C-Dialect-Options
Como puede ver, GCC usa un dialecto GNU de C ++ 03 por defecto (que no parece ser compatible con unique_ptr).
Intentando compilar el siguiente código:
#include <iostream>
#include <memory>
struct Foo {
Foo() { std::cout << "Foo::Foo/n"; }
~Foo() { std::cout << "Foo::~Foo/n"; }
void bar() { std::cout << "Foo::bar/n"; }
};
void f(const Foo &foo)
{
std::cout << "f(const Foo&)/n";
}
int main()
{
std::unique_ptr<Foo> p1(new Foo); // p1 owns Foo
if (p1) p1->bar();
{
std::unique_ptr<Foo> p2(std::move(p1)); // now p2 owns Foo
f(*p2);
p1 = std::move(p2); // ownership returns to p1
std::cout << "destroying p2.../n";
}
if (p1) p1->bar();
// Foo instance is destroyed when p1 goes out of scope
}
con Orwell Dev-c ++ 5.3.0.3 produce el siguiente error:
''unique_ptr'' no es un miembro de ''std''.
¿Cómo puedo manejar esto?