2016-11-24 29 views
8

Bir sarıcı türüis_nothrow_move_constructible <T>'a bağlı olarak bir sarıcı X <T> noexcept türünde bir hareket edicisini nasıl bildirebilirim?

template <typename T> 
struct X {/*..*/}; 

var varsayalım ve yapamam sadece X(X&&) = default orada önemsiz olmayan şeyler yapmak zorunda çünkü. Ancak, noexcept olmak istiyorum, ancak yalnızca T(T&&)'un noexcept olduğu durumlarda olmasını istiyorum. Bu ::std::is_nothrow_move_constructible ile test edilebilir.

constexpr'a bağlı olarak yapıcının bir sürümünün veya diğerinin koşullu olarak nasıl etkinleştirileceği konusunda bir kayıp yapıyorum. Sanırım SFINAE'yi kullanmanın bir yolu olabilir, ancak bunu ctors'e nasıl uygulayacağımı anlamıyorum.

cevap

9

noexcept belirteci herhangi boolean sabiti ifadesini kabul eder, böylece olabildiğince ama orada doğrudan senin tipin özelliği çek:

template <typename T> 
struct X { 
    X(X&&) noexcept(std::is_nothrow_move_constructible<T>::value) {} 
}; 
+0

Ooooookay, çok kolay oldu. Şerefe. (Bir saat içinde kabul edeceğim) – bitmask

+0

Aşağıdakiler için şunu kullanıyorum, sadece herkesin merak ettiği durumda ... http://codereview.stackexchange.com/q/147999/7189 – bitmask