Browse Source

MSVC 2013 compatibility: workarounds for {}-related compiler crashes.

Initializing values with {} instead of () sometimes leads to internal
compiler error. How amusing.
Vladimír Vondruš 13 years ago
parent
commit
3d3eb8cc8f
  1. 3
      src/Plugins/MagnumFont/MagnumFont.cpp
  2. 9
      src/Primitives/Capsule.cpp
  3. 6
      src/Primitives/Circle.cpp
  4. 3
      src/Primitives/Crosshair.cpp
  5. 3
      src/Primitives/Cube.cpp
  6. 6
      src/Primitives/Cylinder.cpp
  7. 3
      src/Primitives/Implementation/WireframeSpheroid.cpp
  8. 5
      src/Primitives/Line.cpp
  9. 5
      src/Primitives/Plane.cpp
  10. 6
      src/Primitives/UVSphere.cpp

3
src/Plugins/MagnumFont/MagnumFont.cpp

@ -170,7 +170,8 @@ std::pair<Float, Float> MagnumFont::openInternal(Utility::Configuration&& conf,
#endif
}
return {_opened->conf.value<Float>("fontSize"), _opened->conf.value<Float>("lineHeight")};
/* {} initializers are causing ICE in MSVC 2013. Bhaha. */
return std::make_pair(_opened->conf.value<Float>("fontSize"), _opened->conf.value<Float>("lineHeight"));
}
void MagnumFont::doClose() {

9
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<UnsignedInt>{}, std::vector<std::vector<Vector2>>{}, std::vector<std::vector<Vector2>>{}));
/* {} 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<UnsignedInt>(), std::vector<std::vector<Vector2>>(), std::vector<std::vector<Vector2>>()));
std::vector<Vector2> 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<UnsignedInt>{}, std::vector<std::vector<Vector3>>{}, std::vector<std::vector<Vector3>>{}, std::vector<std::vector<Vector2>>{}));
/* {} 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<UnsignedInt>(), std::vector<std::vector<Vector3>>(), std::vector<std::vector<Vector3>>(), std::vector<std::vector<Vector2>>()));
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<UnsignedInt>{}, std::vector<std::vector<Vector3>>{}, std::vector<std::vector<Vector3>>{}, std::vector<std::vector<Vector2>>{}));
/* {} 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<UnsignedInt>(), std::vector<std::vector<Vector3>>(), std::vector<std::vector<Vector3>>(), std::vector<std::vector<Vector2>>()));
Implementation::WireframeSpheroid capsule(segments/4);

6
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<UnsignedInt>{}, std::vector<std::vector<Vector2>>{}, std::vector<std::vector<Vector2>>{}));
Trade::MeshData2D(Mesh::Primitive::TriangleFan, std::vector<UnsignedInt>(), std::vector<std::vector<Vector2>>(), std::vector<std::vector<Vector2>>()));
std::vector<Vector2> 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<UnsignedInt>{}, std::vector<std::vector<Vector2>>{}, std::vector<std::vector<Vector2>>{}));
Trade::MeshData2D(Mesh::Primitive::LineLoop, std::vector<UnsignedInt>(), std::vector<std::vector<Vector2>>(), std::vector<std::vector<Vector2>>()));
std::vector<Vector2> positions;
positions.reserve(segments);

3
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<Vector3>>{}, std::vector<std::vector<Vector2>>{});
/* {} initializers are causing ICE in MSVC 2013. Bhaha. */
}}, std::vector<std::vector<Vector3>>(), std::vector<std::vector<Vector2>>());
}
}}

3
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<Vector3>>{}, std::vector<std::vector<Vector2>>{});
/* {} initializers are causing ICE in MSVC 2013. Bhaha. */
}}, std::vector<std::vector<Vector3>>(), std::vector<std::vector<Vector2>>());
}
}}

6
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<UnsignedInt>{}, std::vector<std::vector<Vector3>>{}, std::vector<std::vector<Vector3>>{}, std::vector<std::vector<Vector2>>{}));
/* {} 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<UnsignedInt>(), std::vector<std::vector<Vector3>>(), std::vector<std::vector<Vector3>>(), std::vector<std::vector<Vector2>>()));
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<UnsignedInt>{}, std::vector<std::vector<Vector3>>{}, std::vector<std::vector<Vector3>>{}, std::vector<std::vector<Vector2>>{}));
/* {} 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<UnsignedInt>(), std::vector<std::vector<Vector3>>(), std::vector<std::vector<Vector3>>(), std::vector<std::vector<Vector2>>()));
Implementation::WireframeSpheroid cylinder(segments/4);

3
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<Vector3>>{}, std::vector<std::vector<Vector2>>{});
/* {} initializers are causing ICE in MSVC 2013. Bhaha. */
return Trade::MeshData3D(Mesh::Primitive::Lines, std::move(_indices), {std::move(_positions)}, std::vector<std::vector<Vector3>>(), std::vector<std::vector<Vector2>>());
}
}}}

5
src/Primitives/Line.cpp

@ -37,9 +37,10 @@ Trade::MeshData2D Line2D::wireframe() {
}
Trade::MeshData3D Line3D::wireframe() {
return Trade::MeshData3D(Mesh::Primitive::Lines, std::vector<UnsignedInt>{}, {std::vector<Vector3>{
/* {} initializers are causing ICE in MSVC 2013. Bhaha. */
return Trade::MeshData3D(Mesh::Primitive::Lines, std::vector<UnsignedInt>(), {std::vector<Vector3>{
{0.0f, 0.0f, 0.0f}, {1.0f, 0.0f, 0.0f},
}}, std::vector<std::vector<Vector3>>{}, std::vector<std::vector<Vector2>>{});
}}, std::vector<std::vector<Vector3>>(), std::vector<std::vector<Vector2>>());
}
}}

5
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<UnsignedInt>{}, {std::vector<Vector3>{
/* {} initializers are causing ICE in MSVC 2013. Bhaha. */
return Trade::MeshData3D(Mesh::Primitive::LineLoop, std::vector<UnsignedInt>(), {std::vector<Vector3>{
{-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<Vector3>>{}, std::vector<std::vector<Vector2>>{});
}}, std::vector<std::vector<Vector3>>(), std::vector<std::vector<Vector2>>());
}
}}

6
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<UnsignedInt>{}, std::vector<std::vector<Vector3>>{}, std::vector<std::vector<Vector3>>{}, std::vector<std::vector<Vector2>>{}));
/* {} 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<UnsignedInt>(), std::vector<std::vector<Vector3>>(), std::vector<std::vector<Vector3>>(), std::vector<std::vector<Vector2>>()));
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<UnsignedInt>{}, std::vector<std::vector<Vector3>>{}, std::vector<std::vector<Vector3>>{}, std::vector<std::vector<Vector2>>{}));
/* {} 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<UnsignedInt>(), std::vector<std::vector<Vector3>>(), std::vector<std::vector<Vector3>>(), std::vector<std::vector<Vector2>>()));
Implementation::WireframeSpheroid sphere(segments/4);

Loading…
Cancel
Save