Browse Source

Animation: Player move is not noexcept because compilers are weird today.

I managed to work around that for Emscripten 1.38.5 by adding an
explicit definition of noexcept Player::Track copy
constructor/assignment, but that didn't solve anything for Emscripten,
iOS or Android. Since I can't reproduce that on *anything* I have on
this machine and it seems that the problem somehow just goes away when
using a more recent Clang, I decided to just remove the noexcept
specifier altogether.

I had a temptation to make it noexcept everywhere except Clang, but that
might add potential portability issues (code that works with GCC would
suddenly break on Clang without any clear reason).
pull/191/head
Vladimír Vondruš 8 years ago
parent
commit
2c5f97dacd
  1. 8
      src/Magnum/Animation/Player.h
  2. 4
      src/Magnum/Animation/Player.hpp

8
src/Magnum/Animation/Player.h

@ -256,7 +256,10 @@ template<class T, class K
Player(const Player<T, K>&) = delete; Player(const Player<T, K>&) = delete;
/** @brief Move constructor */ /** @brief Move constructor */
Player(Player<T, K>&&) noexcept; /* The noexcept specifier was removed because it causes *extreme*
issues on various Clang versions (iOS, Android, Emscripten)
currently used on Travis CI. Not on my stock 6.0 or NDK r17 tho. */
Player(Player<T, K>&&);
~Player(); ~Player();
@ -264,7 +267,8 @@ template<class T, class K
Player<T, K>& operator=(const Player<T, K>&) = delete; Player<T, K>& operator=(const Player<T, K>&) = delete;
/** @brief Move assignment */ /** @brief Move assignment */
Player<T, K>& operator=(Player<T, K>&&) noexcept; /* Deliberately not noexcept, see above */
Player<T, K>& operator=(Player<T, K>&&);
/** @brief Time-to-key scaler */ /** @brief Time-to-key scaler */
Scaler scaler() const { return _scaler; } Scaler scaler() const { return _scaler; }

4
src/Magnum/Animation/Player.hpp

@ -68,9 +68,9 @@ template<class T, class K> struct Player<T, K>::Track {
}; };
#endif #endif
template<class T, class K> Player<T, K>::Player(Player<T, K>&&) noexcept = default; template<class T, class K> Player<T, K>::Player(Player<T, K>&&) = default;
template<class T, class K> Player<T, K>& Player<T, K>::operator=(Player<T, K>&&) noexcept = default; template<class T, class K> Player<T, K>& Player<T, K>::operator=(Player<T, K>&&) = default;
template<class T, class K> Player<T, K>::Player(): Player<T, K>{Implementation::DefaultScaler<T, K>::scale} {} template<class T, class K> Player<T, K>::Player(): Player<T, K>{Implementation::DefaultScaler<T, K>::scale} {}

Loading…
Cancel
Save