diff --git a/src/Magnum/AbstractShaderProgram.h b/src/Magnum/AbstractShaderProgram.h index ad58ad71b..2cebca4df 100644 --- a/src/Magnum/AbstractShaderProgram.h +++ b/src/Magnum/AbstractShaderProgram.h @@ -666,7 +666,10 @@ class MAGNUM_EXPORT AbstractShaderProgram: public AbstractObject { * for improved performance, see its documentation for more * information. */ - bool link() { return link({*this}); } + bool link() { + /* GCC 4.4: explicit std::reference_wrapper constructor */ + return link({std::ref(*this)}); + } /** * @brief Get uniform location diff --git a/src/Magnum/Shader.h b/src/Magnum/Shader.h index c7fe26991..57aca5bf0 100644 --- a/src/Magnum/Shader.h +++ b/src/Magnum/Shader.h @@ -548,7 +548,10 @@ class MAGNUM_EXPORT Shader: public AbstractObject { * for improved performance, see its documentation for more * information. */ - bool compile() { return compile({*this}); } + bool compile() { + /* GCC 4.4: explicit std::reference_wrapper constructor */ + return compile({std::ref(*this)}); + } private: Type _type; diff --git a/src/Magnum/Shaders/DistanceFieldVector.cpp b/src/Magnum/Shaders/DistanceFieldVector.cpp index 911b1d750..8dd861719 100644 --- a/src/Magnum/Shaders/DistanceFieldVector.cpp +++ b/src/Magnum/Shaders/DistanceFieldVector.cpp @@ -60,8 +60,9 @@ template DistanceFieldVector::DistanceFieldV .addSource(rs.get(vertexShaderName())); vert.addSource(rs.get("DistanceFieldVector.frag")); - /* GCC 4.5: the same issue */ - std::initializer_list> ss{frag, vert}; + /* GCC 4.5: the same issue, GCC 4.4 additionally has explicit + std::reference_wrapper constructor */ + std::initializer_list> ss{std::ref(frag), std::ref(vert)}; CORRADE_INTERNAL_ASSERT_OUTPUT(Shader::compile(ss)); AbstractShaderProgram::attachShader(frag); diff --git a/src/Magnum/Shaders/Flat.cpp b/src/Magnum/Shaders/Flat.cpp index 2e1735fcb..41effb5b4 100644 --- a/src/Magnum/Shaders/Flat.cpp +++ b/src/Magnum/Shaders/Flat.cpp @@ -65,8 +65,9 @@ template Flat::Flat(const Flags flags): tran frag.addSource(flags & Flag::Textured ? "#define TEXTURED\n" : "") .addSource(rs.get("Flat.frag")); - /* GCC 4.5: the same issue */ - std::initializer_list> ss{frag, vert}; + /* GCC 4.5: the same issue, GCC 4.4 additionally has explicit + std::reference_wrapper constructor */ + std::initializer_list> ss{std::ref(frag), std::ref(vert)}; CORRADE_INTERNAL_ASSERT_OUTPUT(Shader::compile(ss)); attachShader(vert); diff --git a/src/Magnum/Shaders/MeshVisualizer.cpp b/src/Magnum/Shaders/MeshVisualizer.cpp index c0d50e681..a76e53ff4 100644 --- a/src/Magnum/Shaders/MeshVisualizer.cpp +++ b/src/Magnum/Shaders/MeshVisualizer.cpp @@ -75,11 +75,12 @@ MeshVisualizer::MeshVisualizer(const Flags flags): flags(flags), transformationP } #endif + /* GCC 4.4 has explicit std::reference_wrapper constructor */ #ifndef MAGNUM_TARGET_GLES - if(geom) Shader::compile({vert, *geom, frag}); + if(geom) Shader::compile({std::ref(vert), std::ref(*geom), std::ref(frag)}); else #endif - Shader::compile({vert, frag}); + Shader::compile({std::ref(vert), std::ref(frag)}); attachShader(vert); attachShader(frag); diff --git a/src/Magnum/Shaders/Phong.cpp b/src/Magnum/Shaders/Phong.cpp index 21f346d16..02bcaae0c 100644 --- a/src/Magnum/Shaders/Phong.cpp +++ b/src/Magnum/Shaders/Phong.cpp @@ -64,7 +64,8 @@ Phong::Phong(const Flags flags): transformationMatrixUniform(0), projectionMatri .addSource(flags & Flag::SpecularTexture ? "#define SPECULAR_TEXTURE\n" : "") .addSource(rs.get("Phong.frag")); - CORRADE_INTERNAL_ASSERT_OUTPUT(Shader::compile({vert, frag})); + /* GCC 4.4 has explicit std::reference_wrapper constructor */ + CORRADE_INTERNAL_ASSERT_OUTPUT(Shader::compile({std::ref(vert), std::ref(frag)})); attachShader(vert); attachShader(frag); diff --git a/src/Magnum/Shaders/Vector.cpp b/src/Magnum/Shaders/Vector.cpp index 2b1d932b3..5a608384f 100644 --- a/src/Magnum/Shaders/Vector.cpp +++ b/src/Magnum/Shaders/Vector.cpp @@ -60,8 +60,9 @@ template Vector::Vector(): transformationPro .addSource(rs.get(vertexShaderName())); frag.addSource(rs.get("Vector.frag")); - /* GCC 4.5: the same issue */ - std::initializer_list> ss{frag, vert}; + /* GCC 4.5: the same issue, GCC 4.4 additionally has explicit + std::reference_wrapper constructor */ + std::initializer_list> ss{std::ref(frag), std::ref(vert)}; CORRADE_INTERNAL_ASSERT_OUTPUT(Shader::compile(ss)); AbstractShaderProgram::attachShader(vert); diff --git a/src/Magnum/Shaders/VertexColor.cpp b/src/Magnum/Shaders/VertexColor.cpp index 765e3f222..e64f31b23 100644 --- a/src/Magnum/Shaders/VertexColor.cpp +++ b/src/Magnum/Shaders/VertexColor.cpp @@ -68,8 +68,9 @@ template VertexColor::VertexColor(): transfo .addSource(rs.get(vertexShaderName())); frag.addSource(rs.get("VertexColor.frag")); - /* GCC 4.5: the same issue */ - std::initializer_list> ss{frag, vert}; + /* GCC 4.5: the same issue, GCC 4.4 additionally has explicit + std::reference_wrapper constructor */ + std::initializer_list> ss{std::ref(frag), std::ref(vert)}; CORRADE_INTERNAL_ASSERT_OUTPUT(Shader::compile(ss)); attachShader(vert);