From 3d3eb8cc8f18cb404085bb93a24b1cff4bf554db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Thu, 5 Dec 2013 00:40:37 +0100 Subject: [PATCH] MSVC 2013 compatibility: workarounds for {}-related compiler crashes. Initializing values with {} instead of () sometimes leads to internal compiler error. How amusing. --- src/Plugins/MagnumFont/MagnumFont.cpp | 3 ++- src/Primitives/Capsule.cpp | 9 ++++++--- src/Primitives/Circle.cpp | 6 ++++-- src/Primitives/Crosshair.cpp | 3 ++- src/Primitives/Cube.cpp | 3 ++- src/Primitives/Cylinder.cpp | 6 ++++-- src/Primitives/Implementation/WireframeSpheroid.cpp | 3 ++- src/Primitives/Line.cpp | 5 +++-- src/Primitives/Plane.cpp | 5 +++-- src/Primitives/UVSphere.cpp | 6 ++++-- 10 files changed, 32 insertions(+), 17 deletions(-) diff --git a/src/Plugins/MagnumFont/MagnumFont.cpp b/src/Plugins/MagnumFont/MagnumFont.cpp index 60d7e29af..863659b38 100644 --- a/src/Plugins/MagnumFont/MagnumFont.cpp +++ b/src/Plugins/MagnumFont/MagnumFont.cpp @@ -170,7 +170,8 @@ std::pair MagnumFont::openInternal(Utility::Configuration&& conf, #endif } - return {_opened->conf.value("fontSize"), _opened->conf.value("lineHeight")}; + /* {} initializers are causing ICE in MSVC 2013. Bhaha. */ + return std::make_pair(_opened->conf.value("fontSize"), _opened->conf.value("lineHeight")); } void MagnumFont::doClose() { diff --git a/src/Primitives/Capsule.cpp b/src/Primitives/Capsule.cpp index aec1057bf..41e3057b5 100644 --- a/src/Primitives/Capsule.cpp +++ b/src/Primitives/Capsule.cpp @@ -34,7 +34,8 @@ namespace Magnum { namespace Primitives { Trade::MeshData2D Capsule2D::wireframe(UnsignedInt hemisphereRings, UnsignedInt cylinderRings, Float halfLength) { - CORRADE_ASSERT(hemisphereRings >= 1 && cylinderRings >= 1, "Capsule must have at least one hemisphere ring, one cylinder ring and three segments", Trade::MeshData2D(Mesh::Primitive::Lines, std::vector{}, std::vector>{}, std::vector>{})); + /* {} initializers are causing ICE in MSVC 2013. Bhaha. */ + CORRADE_ASSERT(hemisphereRings >= 1 && cylinderRings >= 1, "Capsule must have at least one hemisphere ring, one cylinder ring and three segments", Trade::MeshData2D(Mesh::Primitive::Lines, std::vector(), std::vector>(), std::vector>())); std::vector positions; positions.reserve(hemisphereRings*4+2+(cylinderRings-1)*2); @@ -89,7 +90,8 @@ Trade::MeshData2D Capsule2D::wireframe(UnsignedInt hemisphereRings, UnsignedInt } Trade::MeshData3D Capsule3D::solid(UnsignedInt hemisphereRings, UnsignedInt cylinderRings, UnsignedInt segments, Float halfLength, TextureCoords textureCoords) { - CORRADE_ASSERT(hemisphereRings >= 1 && cylinderRings >= 1 && segments >= 3, "Capsule must have at least one hemisphere ring, one cylinder ring and three segments", Trade::MeshData3D(Mesh::Primitive::Triangles, std::vector{}, std::vector>{}, std::vector>{}, std::vector>{})); + /* {} initializers are causing ICE in MSVC 2013. Bhaha. */ + CORRADE_ASSERT(hemisphereRings >= 1 && cylinderRings >= 1 && segments >= 3, "Capsule must have at least one hemisphere ring, one cylinder ring and three segments", Trade::MeshData3D(Mesh::Primitive::Triangles, std::vector(), std::vector>(), std::vector>(), std::vector>())); Implementation::Spheroid capsule(segments, textureCoords == TextureCoords::Generate ? Implementation::Spheroid::TextureCoords::Generate : @@ -123,7 +125,8 @@ Trade::MeshData3D Capsule3D::solid(UnsignedInt hemisphereRings, UnsignedInt cyli } Trade::MeshData3D Capsule3D::wireframe(const UnsignedInt hemisphereRings, const UnsignedInt cylinderRings, const UnsignedInt segments, const Float halfLength) { - CORRADE_ASSERT(hemisphereRings >= 1 && cylinderRings >= 1 && segments >= 4 && segments%4 == 0, "Primitives::Capsule::wireframe(): improper parameters", Trade::MeshData3D(Mesh::Primitive::Lines, std::vector{}, std::vector>{}, std::vector>{}, std::vector>{})); + /* {} initializers are causing ICE in MSVC 2013. Bhaha. */ + CORRADE_ASSERT(hemisphereRings >= 1 && cylinderRings >= 1 && segments >= 4 && segments%4 == 0, "Primitives::Capsule::wireframe(): improper parameters", Trade::MeshData3D(Mesh::Primitive::Lines, std::vector(), std::vector>(), std::vector>(), std::vector>())); Implementation::WireframeSpheroid capsule(segments/4); diff --git a/src/Primitives/Circle.cpp b/src/Primitives/Circle.cpp index ac2d06e48..89a72142c 100644 --- a/src/Primitives/Circle.cpp +++ b/src/Primitives/Circle.cpp @@ -31,8 +31,9 @@ namespace Magnum { namespace Primitives { Trade::MeshData2D Circle::solid(UnsignedInt segments) { + /* {} initializers are causing ICE in MSVC 2013. Bhaha. */ CORRADE_ASSERT(segments >= 3, "Primitives::Circle::solid(): segments must be >= 3", - Trade::MeshData2D(Mesh::Primitive::TriangleFan, std::vector{}, std::vector>{}, std::vector>{})); + Trade::MeshData2D(Mesh::Primitive::TriangleFan, std::vector(), std::vector>(), std::vector>())); std::vector positions; positions.reserve(segments+1); @@ -51,8 +52,9 @@ Trade::MeshData2D Circle::solid(UnsignedInt segments) { } Trade::MeshData2D Circle::wireframe(UnsignedInt segments) { + /* {} initializers are causing ICE in MSVC 2013. Bhaha. */ CORRADE_ASSERT(segments >= 3, "Primitives::Circle::wireframe(): segments must be >= 3", - Trade::MeshData2D(Mesh::Primitive::LineLoop, std::vector{}, std::vector>{}, std::vector>{})); + Trade::MeshData2D(Mesh::Primitive::LineLoop, std::vector(), std::vector>(), std::vector>())); std::vector positions; positions.reserve(segments); diff --git a/src/Primitives/Crosshair.cpp b/src/Primitives/Crosshair.cpp index 80179f308..7fd6f46be 100644 --- a/src/Primitives/Crosshair.cpp +++ b/src/Primitives/Crosshair.cpp @@ -42,7 +42,8 @@ Trade::MeshData3D Crosshair3D::wireframe() { {-1.0f, 0.0f, 0.0f}, {1.0f, 0.0f, 0.0f}, { 0.0f, -1.0f, 0.0f}, {0.0f, 1.0f, 0.0f}, { 0.0f, 0.0f, -1.0f}, {0.0f, 0.0f, 1.0f} - }}, std::vector>{}, std::vector>{}); + /* {} initializers are causing ICE in MSVC 2013. Bhaha. */ + }}, std::vector>(), std::vector>()); } }} diff --git a/src/Primitives/Cube.cpp b/src/Primitives/Cube.cpp index 84c6cf606..7daf884ea 100644 --- a/src/Primitives/Cube.cpp +++ b/src/Primitives/Cube.cpp @@ -116,7 +116,8 @@ Trade::MeshData3D Cube::wireframe() { { 1.0f, -1.0f, -1.0f}, { 1.0f, 1.0f, -1.0f}, {-1.0f, 1.0f, -1.0f} - }}, std::vector>{}, std::vector>{}); + /* {} initializers are causing ICE in MSVC 2013. Bhaha. */ + }}, std::vector>(), std::vector>()); } }} diff --git a/src/Primitives/Cylinder.cpp b/src/Primitives/Cylinder.cpp index 4f02a8d6d..83cb7df64 100644 --- a/src/Primitives/Cylinder.cpp +++ b/src/Primitives/Cylinder.cpp @@ -32,7 +32,8 @@ namespace Magnum { namespace Primitives { Trade::MeshData3D Cylinder::solid(const UnsignedInt rings, const UnsignedInt segments, const Float halfLength, const Flags flags) { - CORRADE_ASSERT(rings >= 1 && segments >= 3, "Primitives::Cylinder::solid(): cylinder must have at least one ring and three segments", Trade::MeshData3D(Mesh::Primitive::Triangles, std::vector{}, std::vector>{}, std::vector>{}, std::vector>{})); + /* {} initializers are causing ICE in MSVC 2013. Bhaha. */ + CORRADE_ASSERT(rings >= 1 && segments >= 3, "Primitives::Cylinder::solid(): cylinder must have at least one ring and three segments", Trade::MeshData3D(Mesh::Primitive::Triangles, std::vector(), std::vector>(), std::vector>(), std::vector>())); Implementation::Spheroid cylinder(segments, flags & Flag::GenerateTextureCoords ? Implementation::Spheroid::TextureCoords::Generate : Implementation::Spheroid::TextureCoords::DontGenerate); @@ -63,7 +64,8 @@ Trade::MeshData3D Cylinder::solid(const UnsignedInt rings, const UnsignedInt seg } Trade::MeshData3D Cylinder::wireframe(const UnsignedInt rings, const UnsignedInt segments, const Float halfLength) { - CORRADE_ASSERT(rings >= 1 && segments >= 4 && segments%4 == 0, "Primitives::Cylinder::wireframe(): improper parameters", Trade::MeshData3D(Mesh::Primitive::Lines, std::vector{}, std::vector>{}, std::vector>{}, std::vector>{})); + /* {} initializers are causing ICE in MSVC 2013. Bhaha. */ + CORRADE_ASSERT(rings >= 1 && segments >= 4 && segments%4 == 0, "Primitives::Cylinder::wireframe(): improper parameters", Trade::MeshData3D(Mesh::Primitive::Lines, std::vector(), std::vector>(), std::vector>(), std::vector>())); Implementation::WireframeSpheroid cylinder(segments/4); diff --git a/src/Primitives/Implementation/WireframeSpheroid.cpp b/src/Primitives/Implementation/WireframeSpheroid.cpp index a53d7f371..edde8cf54 100644 --- a/src/Primitives/Implementation/WireframeSpheroid.cpp +++ b/src/Primitives/Implementation/WireframeSpheroid.cpp @@ -109,7 +109,8 @@ void WireframeSpheroid::cylinder() { } Trade::MeshData3D WireframeSpheroid::finalize() { - return Trade::MeshData3D(Mesh::Primitive::Lines, std::move(_indices), {std::move(_positions)}, std::vector>{}, std::vector>{}); + /* {} initializers are causing ICE in MSVC 2013. Bhaha. */ + return Trade::MeshData3D(Mesh::Primitive::Lines, std::move(_indices), {std::move(_positions)}, std::vector>(), std::vector>()); } }}} diff --git a/src/Primitives/Line.cpp b/src/Primitives/Line.cpp index 2da32fdf3..4eb40836b 100644 --- a/src/Primitives/Line.cpp +++ b/src/Primitives/Line.cpp @@ -37,9 +37,10 @@ Trade::MeshData2D Line2D::wireframe() { } Trade::MeshData3D Line3D::wireframe() { - return Trade::MeshData3D(Mesh::Primitive::Lines, std::vector{}, {std::vector{ + /* {} initializers are causing ICE in MSVC 2013. Bhaha. */ + return Trade::MeshData3D(Mesh::Primitive::Lines, std::vector(), {std::vector{ {0.0f, 0.0f, 0.0f}, {1.0f, 0.0f, 0.0f}, - }}, std::vector>{}, std::vector>{}); + }}, std::vector>(), std::vector>()); } }} diff --git a/src/Primitives/Plane.cpp b/src/Primitives/Plane.cpp index 6ffa88299..e1752d673 100644 --- a/src/Primitives/Plane.cpp +++ b/src/Primitives/Plane.cpp @@ -52,12 +52,13 @@ Trade::MeshData3D Plane::solid(const TextureCoords textureCoords) { } Trade::MeshData3D Plane::wireframe() { - return Trade::MeshData3D(Mesh::Primitive::LineLoop, std::vector{}, {std::vector{ + /* {} initializers are causing ICE in MSVC 2013. Bhaha. */ + return Trade::MeshData3D(Mesh::Primitive::LineLoop, std::vector(), {std::vector{ {-1.0f, -1.0f, 0.0f}, {1.0f, -1.0f, 0.0f}, {1.0f, 1.0f, 0.0f}, {-1.0f, 1.0f, 0.0f} - }}, std::vector>{}, std::vector>{}); + }}, std::vector>(), std::vector>()); } }} diff --git a/src/Primitives/UVSphere.cpp b/src/Primitives/UVSphere.cpp index dd0c23972..5e3c62608 100644 --- a/src/Primitives/UVSphere.cpp +++ b/src/Primitives/UVSphere.cpp @@ -32,7 +32,8 @@ namespace Magnum { namespace Primitives { Trade::MeshData3D UVSphere::solid(UnsignedInt rings, UnsignedInt segments, TextureCoords textureCoords) { - CORRADE_ASSERT(rings >= 2 && segments >= 3, "UVSphere must have at least two rings and three segments", Trade::MeshData3D(Mesh::Primitive::Triangles, std::vector{}, std::vector>{}, std::vector>{}, std::vector>{})); + /* {} initializers are causing ICE in MSVC 2013. Bhaha. */ + CORRADE_ASSERT(rings >= 2 && segments >= 3, "UVSphere must have at least two rings and three segments", Trade::MeshData3D(Mesh::Primitive::Triangles, std::vector(), std::vector>(), std::vector>(), std::vector>())); Implementation::Spheroid sphere(segments, textureCoords == TextureCoords::Generate ? Implementation::Spheroid::TextureCoords::Generate : @@ -59,7 +60,8 @@ Trade::MeshData3D UVSphere::solid(UnsignedInt rings, UnsignedInt segments, Textu } Trade::MeshData3D UVSphere::wireframe(const UnsignedInt rings, const UnsignedInt segments) { - CORRADE_ASSERT(rings >= 2 && rings%2 == 0 && segments >= 4 && segments%2 == 0, "Primitives::UVSphere::wireframe(): improper parameters", Trade::MeshData3D(Mesh::Primitive::Lines, std::vector{}, std::vector>{}, std::vector>{}, std::vector>{})); + /* {} initializers are causing ICE in MSVC 2013. Bhaha. */ + CORRADE_ASSERT(rings >= 2 && rings%2 == 0 && segments >= 4 && segments%2 == 0, "Primitives::UVSphere::wireframe(): improper parameters", Trade::MeshData3D(Mesh::Primitive::Lines, std::vector(), std::vector>(), std::vector>(), std::vector>())); Implementation::WireframeSpheroid sphere(segments/4);