Browse Source

MSVC 2015 compatibility: more constexpr delegating constructor issues.

pull/107/head
Vladimír Vondruš 11 years ago
parent
commit
5e2981eab6
  1. 19
      src/Magnum/ImageView.h
  2. 6
      src/Magnum/Test/ArrayTest.cpp

19
src/Magnum/ImageView.h

@ -108,7 +108,11 @@ template<UnsignedInt dimensions> class ImageView {
/** @overload
* Similar to the above, but uses default @ref PixelStorage parameters.
*/
constexpr explicit ImageView(PixelFormat format, PixelType type, const VectorTypeFor<dimensions, Int>& size) noexcept: ImageView{{}, format, type, size} {}
#ifndef CORRADE_MSVC2015_COMPATIBILITY
/* Can't use delegating constructors with constexpr -- https://connect.microsoft.com/VisualStudio/feedback/details/1579279/c-constexpr-does-not-work-with-delegating-constructors */
constexpr
#endif
explicit ImageView(PixelFormat format, PixelType type, const VectorTypeFor<dimensions, Int>& size) noexcept: ImageView{{}, format, type, size} {}
/** @brief Storage of pixel data */
PixelStorage storage() const { return _storage; }
@ -237,7 +241,11 @@ template<UnsignedInt dimensions> class CompressedImageView {
* Similar the above, but uses default @ref CompressedPixelStorage
* parameters (or the hardcoded ones in OpenGL ES and WebGL).
*/
constexpr explicit CompressedImageView(CompressedPixelFormat format, const VectorTypeFor<dimensions, Int>& size, Containers::ArrayView<const void> data) noexcept;
#ifndef CORRADE_MSVC2015_COMPATIBILITY
/* Can't use delegating constructors with constexpr -- https://connect.microsoft.com/VisualStudio/feedback/details/1579279/c-constexpr-does-not-work-with-delegating-constructors */
constexpr
#endif
explicit CompressedImageView(CompressedPixelFormat format, const VectorTypeFor<dimensions, Int>& size, Containers::ArrayView<const void> data) noexcept;
#ifndef MAGNUM_TARGET_GLES
/**
@ -356,7 +364,12 @@ template<UnsignedInt dimensions> constexpr CompressedImageView<dimensions>::Comp
_format{format}, _size{size} {}
#ifndef MAGNUM_TARGET_GLES
template<UnsignedInt dimensions> constexpr CompressedImageView<dimensions>::CompressedImageView(const CompressedPixelFormat format, const VectorTypeFor<dimensions, Int>& size, const Containers::ArrayView<const void> data) noexcept: CompressedImageView{{}, format, size, data} {}
template<UnsignedInt dimensions>
#ifndef CORRADE_MSVC2015_COMPATIBILITY
/* Can't use delegating constructors with constexpr -- https://connect.microsoft.com/VisualStudio/feedback/details/1579279/c-constexpr-does-not-work-with-delegating-constructors */
constexpr
#endif
CompressedImageView<dimensions>::CompressedImageView(const CompressedPixelFormat format, const VectorTypeFor<dimensions, Int>& size, const Containers::ArrayView<const void> data) noexcept: CompressedImageView{{}, format, size, data} {}
template<UnsignedInt dimensions> constexpr CompressedImageView<dimensions>::CompressedImageView(const CompressedPixelFormat format, const VectorTypeFor<dimensions, Int>& size) noexcept: CompressedImageView{{}, format, size} {}
#endif

6
src/Magnum/Test/ArrayTest.cpp

@ -51,7 +51,11 @@ void ArrayTest::construct() {
constexpr Array<3, Int> a = {5, 6, 7};
CORRADE_COMPARE(a, (Array<3, Int>(5, 6, 7)));
constexpr Array<3, Int> a2 = 5;
#ifndef CORRADE_MSVC2015_COMPATIBILITY
/* Can't use delegating constructors with constexpr -- https://connect.microsoft.com/VisualStudio/feedback/details/1579279/c-constexpr-does-not-work-with-delegating-constructors */
constexpr
#endif
Array<3, Int> a2 = 5;
CORRADE_COMPARE(a2, (Array<3, Int>(5, 5, 5)));
constexpr Array1D b = 5;

Loading…
Cancel
Save