Browse Source

Merge branch 'master' into compatibility

Vladimír Vondruš 13 years ago
parent
commit
287adb0e8c
  1. 7
      src/CMakeLists.txt
  2. 19
      src/Math/RectangularMatrix.h

7
src/CMakeLists.txt

@ -22,6 +22,13 @@
# DEALINGS IN THE SOFTWARE.
#
# Disable `-pedantic` for GCC 4.6, as the compiler doesn't like
# list-initialization of array of classes (RectangularMatrix constructors). It
# is perfectly legal C++11 and both GCC 4.7 and Clang accept it without notice.
if(CORRADE_GCC46_COMPATIBILITY)
string(REPLACE "-pedantic" "" CORRADE_CXX_FLAGS "${CORRADE_CXX_FLAGS}")
endif()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CORRADE_CXX_FLAGS}")
include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${CORRADE_INCLUDE_DIR})

19
src/Math/RectangularMatrix.h

@ -106,12 +106,7 @@ template<std::size_t cols, std::size_t rows, class T> class RectangularMatrix {
*
* @todo Creating matrix from arbitrary combination of matrices with n rows
*/
#ifndef CORRADE_GCC46_COMPATIBILITY
template<class ...U> inline constexpr /*implicit*/ RectangularMatrix(const Vector<rows, T>& first, const U&... next): _data{first, next...} {
#else
template<class ...U> inline /*implicit*/ RectangularMatrix(const Vector<rows, T>& first, const U&... next): _data() {
constructInternal({first, next...});
#endif
static_assert(sizeof...(next)+1 == cols, "Improper number of arguments passed to RectangularMatrix constructor");
}
@ -448,21 +443,7 @@ template<std::size_t cols, std::size_t rows, class T> class RectangularMatrix {
private:
/* Implementation for RectangularMatrix<cols, rows, T>::RectangularMatrix(const RectangularMatrix<cols, rows, U>&) */
#ifndef CORRADE_GCC46_COMPATIBILITY
template<class U, std::size_t ...sequence> inline constexpr explicit RectangularMatrix(Implementation::Sequence<sequence...>, const RectangularMatrix<cols, rows, U>& matrix): _data{Vector<rows, T>(matrix[sequence])...} {}
#else
template<class U, std::size_t ...sequence> inline constexpr explicit RectangularMatrix(Implementation::Sequence<sequence...>, const RectangularMatrix<cols, rows, U>& matrix): _data() {
constructInternal({Vector<rows, T>(matrix[sequence])...});
}
#endif
#ifdef CORRADE_GCC46_COMPATIBILITY
/* GCC < 4.7 workaround for a ton of warnings / "error: bad array initializer" */
inline void constructInternal(std::initializer_list<Vector<rows, T>> data) {
for(std::size_t i = 0; i != data.size(); ++i)
_data[i] = *(data.begin() + i);
}
#endif
Vector<rows, T> _data[cols];
};

Loading…
Cancel
Save