From 115e73f967165dd650ae087d2f963a4834974317 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Sat, 3 Aug 2013 16:16:08 +0200 Subject: [PATCH] GCC 4.5 compatibility: cannot default some move operators. I don't know why. --- src/Trade/AbstractMaterialData.cpp | 6 ++++++ src/Trade/AbstractMaterialData.h | 2 +- src/Trade/MeshObjectData2D.cpp | 7 +++++++ src/Trade/MeshObjectData2D.h | 2 +- src/Trade/MeshObjectData3D.cpp | 7 +++++++ src/Trade/MeshObjectData3D.h | 2 +- src/Trade/ObjectData2D.cpp | 9 ++++++++- src/Trade/ObjectData3D.cpp | 9 ++++++++- src/Trade/SceneData.cpp | 7 ++++++- src/Trade/TextureData.h | 13 ++++++++++++- 10 files changed, 57 insertions(+), 7 deletions(-) diff --git a/src/Trade/AbstractMaterialData.cpp b/src/Trade/AbstractMaterialData.cpp index 7df183d61..ed879f3c8 100644 --- a/src/Trade/AbstractMaterialData.cpp +++ b/src/Trade/AbstractMaterialData.cpp @@ -32,6 +32,12 @@ AbstractMaterialData::AbstractMaterialData(Type type): _type(type) {} AbstractMaterialData::~AbstractMaterialData() {} +/* GCC 4.5 doesn't like it defaulted */ +AbstractMaterialData& AbstractMaterialData::operator=(AbstractMaterialData&& other) { + std::swap(_type, other._type); + return *this; +} + Debug operator<<(Debug debug, const AbstractMaterialData::Type value) { switch(value) { #define _c(value) case AbstractMaterialData::Type::value: return debug << "Trade::AbstractMaterialData::Type::" #value; diff --git a/src/Trade/AbstractMaterialData.h b/src/Trade/AbstractMaterialData.h index 2cf22eddf..a94e02e58 100644 --- a/src/Trade/AbstractMaterialData.h +++ b/src/Trade/AbstractMaterialData.h @@ -64,7 +64,7 @@ class MAGNUM_EXPORT AbstractMaterialData { AbstractMaterialData& operator=(const AbstractMaterialData&) = delete; /** @brief Move assignment */ - AbstractMaterialData& operator=(AbstractMaterialData&&) = default; + AbstractMaterialData& operator=(AbstractMaterialData&&); /** @brief Material type */ Type type() const { return _type; } diff --git a/src/Trade/MeshObjectData2D.cpp b/src/Trade/MeshObjectData2D.cpp index bc52d77fe..1b6cf8dfa 100644 --- a/src/Trade/MeshObjectData2D.cpp +++ b/src/Trade/MeshObjectData2D.cpp @@ -28,4 +28,11 @@ namespace Magnum { namespace Trade { MeshObjectData2D::MeshObjectData2D(std::vector children, const Matrix3& transformation, UnsignedInt instance, UnsignedInt material): ObjectData2D(std::move(children), transformation, InstanceType::Mesh, instance), _material(material) {} +/* GCC 4.5 doesn't like it defaulted */ +MeshObjectData2D& MeshObjectData2D::operator=(MeshObjectData2D&& other) { + ObjectData2D::operator=(std::move(other)); + std::swap(_material, other._material); + return *this; +} + }} diff --git a/src/Trade/MeshObjectData2D.h b/src/Trade/MeshObjectData2D.h index 77f819b18..90220bd49 100644 --- a/src/Trade/MeshObjectData2D.h +++ b/src/Trade/MeshObjectData2D.h @@ -61,7 +61,7 @@ class MAGNUM_EXPORT MeshObjectData2D: public ObjectData2D { MeshObjectData2D& operator=(const MeshObjectData2D&) = delete; /** @brief Move assignment */ - MeshObjectData2D& operator=(MeshObjectData2D&&) = default; + MeshObjectData2D& operator=(MeshObjectData2D&&); /** @brief Material ID */ UnsignedInt material() const { return _material; } diff --git a/src/Trade/MeshObjectData3D.cpp b/src/Trade/MeshObjectData3D.cpp index 905c628e4..8ae694290 100644 --- a/src/Trade/MeshObjectData3D.cpp +++ b/src/Trade/MeshObjectData3D.cpp @@ -28,4 +28,11 @@ namespace Magnum { namespace Trade { MeshObjectData3D::MeshObjectData3D(std::vector children, const Matrix4& transformation, UnsignedInt instance, UnsignedInt material): ObjectData3D(std::move(children), transformation, InstanceType::Mesh, instance), _material(material) {} +/* GCC 4.5 doesn't like it defaulted */ +MeshObjectData3D& MeshObjectData3D::operator=(MeshObjectData3D&& other) { + ObjectData3D::operator=(std::move(other)); + std::swap(_material, other._material); + return *this; +} + }} diff --git a/src/Trade/MeshObjectData3D.h b/src/Trade/MeshObjectData3D.h index 1a5b820af..e1a852a61 100644 --- a/src/Trade/MeshObjectData3D.h +++ b/src/Trade/MeshObjectData3D.h @@ -61,7 +61,7 @@ class MAGNUM_EXPORT MeshObjectData3D: public ObjectData3D { MeshObjectData3D& operator=(const MeshObjectData3D&) = delete; /** @brief Move assignment */ - MeshObjectData3D& operator=(MeshObjectData3D&&) = default; + MeshObjectData3D& operator=(MeshObjectData3D&&); /** @brief Material ID */ UnsignedInt material() const { return _material; } diff --git a/src/Trade/ObjectData2D.cpp b/src/Trade/ObjectData2D.cpp index 098e3655f..ad5b4de03 100644 --- a/src/Trade/ObjectData2D.cpp +++ b/src/Trade/ObjectData2D.cpp @@ -34,7 +34,14 @@ ObjectData2D::ObjectData2D(ObjectData2D&&) = default; ObjectData2D::~ObjectData2D() = default; -ObjectData2D& ObjectData2D::operator=(ObjectData2D&&) = default; +/* GCC 4.5 doesn't like it defaulted */ +ObjectData2D& ObjectData2D::operator=(ObjectData2D&& other) { + std::swap(_children, other._children); + std::swap(_transformation, other._transformation); + std::swap(_instanceType, other._instanceType); + std::swap(_instance, other._instance); + return *this; +} #ifndef DOXYGEN_GENERATING_OUTPUT Debug operator<<(Debug debug, ObjectData2D::InstanceType value) { diff --git a/src/Trade/ObjectData3D.cpp b/src/Trade/ObjectData3D.cpp index 777c2b378..cd995b8f7 100644 --- a/src/Trade/ObjectData3D.cpp +++ b/src/Trade/ObjectData3D.cpp @@ -34,7 +34,14 @@ ObjectData3D::ObjectData3D(ObjectData3D&&) = default; ObjectData3D::~ObjectData3D() = default; -ObjectData3D& ObjectData3D::operator=(ObjectData3D&&) = default; +/* GCC 4.5 doesn't like it defaulted */ +ObjectData3D& ObjectData3D::operator=(ObjectData3D&& other) { + std::swap(_children, other._children); + std::swap(_transformation, other._transformation); + std::swap(_instanceType, other._instanceType); + std::swap(_instance, other._instance); + return *this; +} #ifndef DOXYGEN_GENERATING_OUTPUT Debug operator<<(Debug debug, ObjectData3D::InstanceType value) { diff --git a/src/Trade/SceneData.cpp b/src/Trade/SceneData.cpp index 5289be73e..85036b4f4 100644 --- a/src/Trade/SceneData.cpp +++ b/src/Trade/SceneData.cpp @@ -30,6 +30,11 @@ SceneData::SceneData(std::vector children2D, std::vector