Cutlass
CUDA Templates for Linear Algebra Subroutines and Solvers
Classes | Typedefs | Functions
cutlass::platform Namespace Reference

Classes

struct  aligned_chunk
 
struct  aligned_storage
 std::aligned_storage More...
 
struct  alignment_of
 std::alignment_of More...
 
struct  alignment_of< const value_t >
 
struct  alignment_of< const volatile value_t >
 
struct  alignment_of< double2 >
 
struct  alignment_of< double4 >
 
struct  alignment_of< float4 >
 
struct  alignment_of< int4 >
 
struct  alignment_of< long4 >
 
struct  alignment_of< longlong2 >
 
struct  alignment_of< longlong4 >
 
struct  alignment_of< uint4 >
 
struct  alignment_of< ulong4 >
 
struct  alignment_of< ulonglong2 >
 
struct  alignment_of< ulonglong4 >
 
struct  alignment_of< volatile value_t >
 
struct  bool_constant
 std::bool_constant More...
 
class  complex
 
struct  conditional
 std::conditional (true specialization) More...
 
struct  conditional< false, T, F >
 std::conditional (false specialization) More...
 
struct  default_delete
 Default deleter. More...
 
struct  default_delete< T[]>
 Partial specialization for deleting array types. More...
 
struct  enable_if
 std::enable_if (true specialization) More...
 
struct  enable_if< false, T >
 std::enable_if (false specialization) More...
 
struct  greater
 std::greater More...
 
struct  integral_constant
 std::integral_constant More...
 
struct  is_arithmetic
 std::is_arithmetic More...
 
struct  is_base_of
 std::is_base_of More...
 
struct  is_base_of_helper
 Helper for std::is_base_of. More...
 
struct  is_floating_point
 std::is_floating_point More...
 
struct  is_fundamental
 std::is_fundamental More...
 
struct  is_integral
 std::is_integral More...
 
struct  is_integral< char >
 
struct  is_integral< const T >
 
struct  is_integral< const volatile T >
 
struct  is_integral< int >
 
struct  is_integral< long >
 
struct  is_integral< long long >
 
struct  is_integral< short >
 
struct  is_integral< signed char >
 
struct  is_integral< unsigned char >
 
struct  is_integral< unsigned int >
 
struct  is_integral< unsigned long >
 
struct  is_integral< unsigned long long >
 
struct  is_integral< unsigned short >
 
struct  is_integral< volatile T >
 
struct  is_pointer
 std::is_pointer More...
 
struct  is_pointer_helper
 Helper for std::is_pointer (false specialization) More...
 
struct  is_pointer_helper< T * >
 Helper for std::is_pointer (true specialization) More...
 
struct  is_same
 std::is_same (false specialization) More...
 
struct  is_same< A, A >
 std::is_same (true specialization) More...
 
struct  is_trivially_copyable
 
struct  is_void
 std::is_void More...
 
struct  is_volatile
 std::is_volatile More...
 
struct  is_volatile< volatile T >
 
struct  less
 std::less More...
 
struct  nullptr_t
 std::nullptr_t More...
 
struct  Pair
 Constructs an iterator from a pair of iterators. More...
 
struct  plus
 platform::plus More...
 
struct  remove_const
 std::remove_const (non-const specialization) More...
 
struct  remove_const< const T >
 std::remove_const (const specialization) More...
 
struct  remove_cv
 std::remove_cv More...
 
struct  remove_volatile
 std::remove_volatile (non-volatile specialization) More...
 
struct  remove_volatile< volatile T >
 std::remove_volatile (volatile specialization) More...
 
class  unique_ptr
 std::unique_ptr More...
 

Typedefs

typedef integral_constant< bool, true > true_type
 The type used as a compile-time boolean with true value. More...
 
typedef integral_constant< bool, false > false_type
 The type used as a compile-time boolean with false value. More...
 

Functions

CUTLASS_HOST_DEVICE float const & real (cuFloatComplex const &z)
 Returns the real part of the complex number. More...
 
CUTLASS_HOST_DEVICE float & real (cuFloatComplex &z)
 Returns the real part of the complex number. More...
 
CUTLASS_HOST_DEVICE double const & real (cuDoubleComplex const &z)
 Returns the real part of the complex number. More...
 
CUTLASS_HOST_DEVICE double & real (cuDoubleComplex &z)
 Returns the real part of the complex number. More...
 
CUTLASS_HOST_DEVICE float const & imag (cuFloatComplex const &z)
 Returns the imaginary part of the complex number. More...
 
CUTLASS_HOST_DEVICE float & imag (cuFloatComplex &z)
 Returns the imaginary part of the complex number. More...
 
CUTLASS_HOST_DEVICE double const & imag (cuDoubleComplex const &z)
 Returns the imaginary part of the complex number. More...
 
CUTLASS_HOST_DEVICE double & imag (cuDoubleComplex &z)
 Returns the imaginary part of the complex number. More...
 
template<typename T >
CUTLASS_HOST_DEVICE T const & real (complex< T > const &z)
 Returns the real part of the complex number. More...
 
template<typename T >
CUTLASS_HOST_DEVICE T & real (complex< T > &z)
 Returns the real part of the complex number. More...
 
template<typename T >
CUTLASS_HOST_DEVICE T const & imag (complex< T > const &z)
 Returns the imaginary part of the complex number. More...
 
template<typename T >
CUTLASS_HOST_DEVICE T & imag (complex< T > &z)
 Returns the imaginary part of the complex number. More...
 
template<typename T >
std::ostream & operator<< (std::ostream &out, complex< T > const &z)
 
template<typename T >
CUTLASS_HOST_DEVICE bool operator== (complex< T > const &lhs, complex< T > const &rhs)
 Equality operator. More...
 
template<typename T >
CUTLASS_HOST_DEVICE bool operator!= (complex< T > const &lhs, complex< T > const &rhs)
 Inequality operator. More...
 
template<typename T >
CUTLASS_HOST_DEVICE complex< T > operator+ (complex< T > const &lhs, complex< T > const &rhs)
 Addition. More...
 
template<typename T >
CUTLASS_HOST_DEVICE complex< T > operator- (complex< T > const &lhs, complex< T > const &rhs)
 Subtraction. More...
 
template<typename T >
CUTLASS_HOST_DEVICE complex< T > operator* (complex< T > const &lhs, complex< T > const &rhs)
 Multiplication. More...
 
template<typename T >
CUTLASS_HOST_DEVICE complex< T > operator* (complex< T > const &lhs, T const &s)
 Scalar Multiplication. More...
 
template<typename T >
CUTLASS_HOST_DEVICE complex< T > operator* (T const &s, complex< T > const &rhs)
 Scalar Multiplication. More...
 
template<typename T >
CUTLASS_HOST_DEVICE complex< T > operator/ (complex< T > const &lhs, complex< T > const &rhs)
 Division. More...
 
template<typename T >
CUTLASS_HOST_DEVICE complex< T > operator/ (complex< T > const &lhs, T const &s)
 Scalar Division. More...
 
template<typename T >
CUTLASS_HOST_DEVICE complex< T > operator/ (T const &s, complex< T > const &rhs)
 Scalar divided by complex. More...
 
template<typename T >
CUTLASS_HOST_DEVICE complex< T > & operator+= (complex< T > &lhs, complex< T > const &rhs)
 Addition. More...
 
template<typename T >
CUTLASS_HOST_DEVICE complex< T > & operator-= (complex< T > &lhs, complex< T > const &rhs)
 Subtraction. More...
 
template<typename T >
CUTLASS_HOST_DEVICE complex< T > & operator*= (complex< T > &lhs, complex< T > const &rhs)
 Multiplication. More...
 
template<typename T >
CUTLASS_HOST_DEVICE complex< T > & operator*= (complex< T > &lhs, T s)
 Scalar multiplication. More...
 
template<typename T >
CUTLASS_HOST_DEVICE complex< T > & operator/= (complex< T > &lhs, complex< T > const &rhs)
 Division. More...
 
template<typename T >
CUTLASS_HOST_DEVICEabs (complex< T > const &z)
 Returns the magnitude of the complex number. More...
 
template<typename T >
CUTLASS_HOST_DEVICEarg (complex< T > const &z)
 Returns the magnitude of the complex number. More...
 
template<typename T >
CUTLASS_HOST_DEVICEnorm (complex< T > const &z)
 Returns the squared magnitude. More...
 
template<typename T >
CUTLASS_HOST_DEVICE complex< T > conj (complex< T > const &z)
 Returns the complex conjugate. More...
 
template<typename T >
CUTLASS_HOST_DEVICE complex< T > proj (complex< T > const &z)
 Projects the complex number z onto the Riemann sphere. More...
 
template<typename T >
CUTLASS_HOST_DEVICE complex< T > polar (T const &r, T const &theta=T())
 Returns a complex number with magnitude r and phase theta. More...
 
template<typename T >
CUTLASS_HOST_DEVICE complex< T > exp (complex< T > const &z)
 Computes the complex exponential of z. More...
 
template<typename T >
CUTLASS_HOST_DEVICE complex< T > log (complex< T > const &z)
 Computes the complex exponential of z. More...
 
template<typename T >
CUTLASS_HOST_DEVICE complex< T > log10 (complex< T > const &z)
 Computes the complex exponential of z. More...
 
template<typename T >
CUTLASS_HOST_DEVICE complex< T > sqrt (complex< T > const &z)
 Computes the square root of complex number z. More...
 
template<typename T >
CUTLASS_HOST_DEVICE complex< T > cos (complex< T > const &z)
 Computes the cosine of complex z. More...
 
template<typename T >
CUTLASS_HOST_DEVICE complex< T > sin (complex< T > const &z)
 Computes the sin of complex z. More...
 
template<typename T1 , typename T2 >
Pair< T1, T2 > make_Pair (T1 const &first, T2 const &second)
 Constructs a pair and deduces types. More...
 
template<typename T1 , typename T2 >
CUTLASS_HOST_DEVICE bool operator== (Pair< T1, T2 > const &lhs, Pair< T1, T2 > const &rhs)
 Equality. More...
 
template<typename T1 , typename T2 >
CUTLASS_HOST_DEVICE bool operator!= (Pair< T1, T2 > const &lhs, Pair< T1, T2 > const &rhs)
 Inequality. More...
 
template<typename T1 , typename T2 >
CUTLASS_HOST_DEVICE bool operator< (Pair< T1, T2 > const &lhs, Pair< T1, T2 > const &rhs)
 Lexical comparison. More...
 
template<typename T1 , typename T2 >
CUTLASS_HOST_DEVICE bool operator<= (Pair< T1, T2 > const &lhs, Pair< T1, T2 > const &rhs)
 Lexical comparison. More...
 
template<typename T1 , typename T2 >
CUTLASS_HOST_DEVICE bool operator> (Pair< T1, T2 > const &lhs, Pair< T1, T2 > const &rhs)
 Lexical comparison. More...
 
template<typename T1 , typename T2 >
CUTLASS_HOST_DEVICE bool operator>= (Pair< T1, T2 > const &lhs, Pair< T1, T2 > const &rhs)
 Lexical comparison. More...
 
template<typename T >
CUTLASS_HOST_DEVICE constexpr const T & min (const T &a, const T &b)
 std::min More...
 
template<typename T >
CUTLASS_HOST_DEVICE constexpr const T & max (const T &a, const T &b)
 std::max More...
 
template<class T1 , class T2 >
CUTLASS_HOST_DEVICE constexpr bool operator== (const pair< T1, T2 > &lhs, const pair< T1, T2 > &rhs)
 
template<class T1 , class T2 >
CUTLASS_HOST_DEVICE constexpr bool operator!= (const pair< T1, T2 > &lhs, const pair< T1, T2 > &rhs)
 
template<class T1 , class T2 >
CUTLASS_HOST_DEVICE constexpr bool operator< (const pair< T1, T2 > &lhs, const pair< T1, T2 > &rhs)
 
template<class T1 , class T2 >
CUTLASS_HOST_DEVICE constexpr bool operator<= (const pair< T1, T2 > &lhs, const pair< T1, T2 > &rhs)
 
template<class T1 , class T2 >
CUTLASS_HOST_DEVICE constexpr bool operator> (const pair< T1, T2 > &lhs, const pair< T1, T2 > &rhs)
 
template<class T1 , class T2 >
CUTLASS_HOST_DEVICE constexpr bool operator>= (const pair< T1, T2 > &lhs, const pair< T1, T2 > &rhs)
 
template<class T1 , class T2 >
CUTLASS_HOST_DEVICE std::pair< T1, T2 > make_pair (T1 t, T2 u)
 
template<>
struct __align__ (1) aligned_chunk< 1 >
 
template<>
struct __align__ (2) aligned_chunk< 2 >
 
template<>
struct __align__ (4) aligned_chunk< 4 >
 
template<>
struct __align__ (8) aligned_chunk< 8 >
 
template<>
struct __align__ (16) aligned_chunk< 16 >
 
template<>
struct __align__ (32) aligned_chunk< 32 >
 
template<>
struct __align__ (64) aligned_chunk< 64 >
 
template<>
struct __align__ (128) aligned_chunk< 128 >
 
template<>
struct __align__ (256) aligned_chunk< 256 >
 
template<>
struct __align__ (512) aligned_chunk< 512 >
 
template<>
struct __align__ (1024) aligned_chunk< 1024 >
 
template<>
struct __align__ (2048) aligned_chunk< 2048 >
 
template<>
struct __align__ (4096) aligned_chunk< 4096 >
 
template<typename T , typename Deleter >
void swap (unique_ptr< T, Deleter > &lhs, unique_ptr< T, Deleter > &rhs) noexcept
 Specializes the swap algorithm. More...
 

Typedef Documentation

◆ false_type

◆ true_type

Function Documentation

◆ __align__() [1/13]

template<>
struct cutlass::platform::__align__ ( )

◆ __align__() [2/13]

template<>
struct cutlass::platform::__align__ ( 128  )

◆ __align__() [3/13]

template<>
struct cutlass::platform::__align__ ( 256  )

◆ __align__() [4/13]

template<>
struct cutlass::platform::__align__ ( 512  )

◆ __align__() [5/13]

template<>
struct cutlass::platform::__align__ ( 1024  )

◆ __align__() [6/13]

template<>
struct cutlass::platform::__align__ ( 2048  )

◆ __align__() [7/13]

template<>
struct cutlass::platform::__align__ ( 4096  )

◆ __align__() [8/13]

template<>
struct cutlass::platform::__align__ ( )

◆ __align__() [9/13]

template<>
struct cutlass::platform::__align__ ( 64  )

◆ __align__() [10/13]

template<>
struct cutlass::platform::__align__ ( )

◆ __align__() [11/13]

template<>
struct cutlass::platform::__align__ ( )

◆ __align__() [12/13]

template<>
struct cutlass::platform::__align__ ( 16  )

◆ __align__() [13/13]

template<>
struct cutlass::platform::__align__ ( 32  )

◆ abs()

template<typename T >
CUTLASS_HOST_DEVICE T cutlass::platform::abs ( complex< T > const &  z)

◆ arg()

template<typename T >
CUTLASS_HOST_DEVICE T cutlass::platform::arg ( complex< T > const &  z)

◆ conj()

template<typename T >
CUTLASS_HOST_DEVICE complex<T> cutlass::platform::conj ( complex< T > const &  z)

◆ cos()

template<typename T >
CUTLASS_HOST_DEVICE complex<T> cutlass::platform::cos ( complex< T > const &  z)

◆ exp()

template<typename T >
CUTLASS_HOST_DEVICE complex<T> cutlass::platform::exp ( complex< T > const &  z)

◆ imag() [1/6]

CUTLASS_HOST_DEVICE float const& cutlass::platform::imag ( cuFloatComplex const &  z)

◆ imag() [2/6]

CUTLASS_HOST_DEVICE float& cutlass::platform::imag ( cuFloatComplex &  z)

◆ imag() [3/6]

CUTLASS_HOST_DEVICE double const& cutlass::platform::imag ( cuDoubleComplex const &  z)

◆ imag() [4/6]

CUTLASS_HOST_DEVICE double& cutlass::platform::imag ( cuDoubleComplex &  z)

◆ imag() [5/6]

template<typename T >
CUTLASS_HOST_DEVICE T const& cutlass::platform::imag ( complex< T > const &  z)

◆ imag() [6/6]

template<typename T >
CUTLASS_HOST_DEVICE T& cutlass::platform::imag ( complex< T > &  z)

◆ log()

template<typename T >
CUTLASS_HOST_DEVICE complex<T> cutlass::platform::log ( complex< T > const &  z)

◆ log10()

template<typename T >
CUTLASS_HOST_DEVICE complex<T> cutlass::platform::log10 ( complex< T > const &  z)

◆ make_Pair()

template<typename T1 , typename T2 >
Pair<T1, T2> cutlass::platform::make_Pair ( T1 const &  first,
T2 const &  second 
)

◆ make_pair()

template<class T1 , class T2 >
CUTLASS_HOST_DEVICE std::pair<T1, T2> cutlass::platform::make_pair ( T1  t,
T2  u 
)

◆ max()

template<typename T >
CUTLASS_HOST_DEVICE constexpr const T& cutlass::platform::max ( const T &  a,
const T &  b 
)

◆ min()

template<typename T >
CUTLASS_HOST_DEVICE constexpr const T& cutlass::platform::min ( const T &  a,
const T &  b 
)

◆ norm()

template<typename T >
CUTLASS_HOST_DEVICE T cutlass::platform::norm ( complex< T > const &  z)

◆ operator!=() [1/3]

template<typename T1 , typename T2 >
CUTLASS_HOST_DEVICE bool cutlass::platform::operator!= ( Pair< T1, T2 > const &  lhs,
Pair< T1, T2 > const &  rhs 
)

◆ operator!=() [2/3]

template<class T1 , class T2 >
CUTLASS_HOST_DEVICE constexpr bool cutlass::platform::operator!= ( const pair< T1, T2 > &  lhs,
const pair< T1, T2 > &  rhs 
)

◆ operator!=() [3/3]

template<typename T >
CUTLASS_HOST_DEVICE bool cutlass::platform::operator!= ( complex< T > const &  lhs,
complex< T > const &  rhs 
)

◆ operator*() [1/3]

template<typename T >
CUTLASS_HOST_DEVICE complex<T> cutlass::platform::operator* ( complex< T > const &  lhs,
complex< T > const &  rhs 
)

◆ operator*() [2/3]

template<typename T >
CUTLASS_HOST_DEVICE complex<T> cutlass::platform::operator* ( complex< T > const &  lhs,
T const &  s 
)

◆ operator*() [3/3]

template<typename T >
CUTLASS_HOST_DEVICE complex<T> cutlass::platform::operator* ( T const &  s,
complex< T > const &  rhs 
)

◆ operator*=() [1/2]

template<typename T >
CUTLASS_HOST_DEVICE complex<T>& cutlass::platform::operator*= ( complex< T > &  lhs,
complex< T > const &  rhs 
)

◆ operator*=() [2/2]

template<typename T >
CUTLASS_HOST_DEVICE complex<T>& cutlass::platform::operator*= ( complex< T > &  lhs,
s 
)

◆ operator+()

template<typename T >
CUTLASS_HOST_DEVICE complex<T> cutlass::platform::operator+ ( complex< T > const &  lhs,
complex< T > const &  rhs 
)

◆ operator+=()

template<typename T >
CUTLASS_HOST_DEVICE complex<T>& cutlass::platform::operator+= ( complex< T > &  lhs,
complex< T > const &  rhs 
)

◆ operator-()

template<typename T >
CUTLASS_HOST_DEVICE complex<T> cutlass::platform::operator- ( complex< T > const &  lhs,
complex< T > const &  rhs 
)

◆ operator-=()

template<typename T >
CUTLASS_HOST_DEVICE complex<T>& cutlass::platform::operator-= ( complex< T > &  lhs,
complex< T > const &  rhs 
)

◆ operator/() [1/3]

template<typename T >
CUTLASS_HOST_DEVICE complex<T> cutlass::platform::operator/ ( complex< T > const &  lhs,
complex< T > const &  rhs 
)

◆ operator/() [2/3]

template<typename T >
CUTLASS_HOST_DEVICE complex<T> cutlass::platform::operator/ ( complex< T > const &  lhs,
T const &  s 
)

◆ operator/() [3/3]

template<typename T >
CUTLASS_HOST_DEVICE complex<T> cutlass::platform::operator/ ( T const &  s,
complex< T > const &  rhs 
)

◆ operator/=()

template<typename T >
CUTLASS_HOST_DEVICE complex<T>& cutlass::platform::operator/= ( complex< T > &  lhs,
complex< T > const &  rhs 
)

◆ operator<() [1/2]

template<typename T1 , typename T2 >
CUTLASS_HOST_DEVICE bool cutlass::platform::operator< ( Pair< T1, T2 > const &  lhs,
Pair< T1, T2 > const &  rhs 
)

◆ operator<() [2/2]

template<class T1 , class T2 >
CUTLASS_HOST_DEVICE constexpr bool cutlass::platform::operator< ( const pair< T1, T2 > &  lhs,
const pair< T1, T2 > &  rhs 
)

◆ operator<<()

template<typename T >
std::ostream& cutlass::platform::operator<< ( std::ostream &  out,
complex< T > const &  z 
)

◆ operator<=() [1/2]

template<typename T1 , typename T2 >
CUTLASS_HOST_DEVICE bool cutlass::platform::operator<= ( Pair< T1, T2 > const &  lhs,
Pair< T1, T2 > const &  rhs 
)

◆ operator<=() [2/2]

template<class T1 , class T2 >
CUTLASS_HOST_DEVICE constexpr bool cutlass::platform::operator<= ( const pair< T1, T2 > &  lhs,
const pair< T1, T2 > &  rhs 
)

◆ operator==() [1/3]

template<typename T1 , typename T2 >
CUTLASS_HOST_DEVICE bool cutlass::platform::operator== ( Pair< T1, T2 > const &  lhs,
Pair< T1, T2 > const &  rhs 
)

◆ operator==() [2/3]

template<typename T >
CUTLASS_HOST_DEVICE bool cutlass::platform::operator== ( complex< T > const &  lhs,
complex< T > const &  rhs 
)

◆ operator==() [3/3]

template<class T1 , class T2 >
CUTLASS_HOST_DEVICE constexpr bool cutlass::platform::operator== ( const pair< T1, T2 > &  lhs,
const pair< T1, T2 > &  rhs 
)

◆ operator>() [1/2]

template<typename T1 , typename T2 >
CUTLASS_HOST_DEVICE bool cutlass::platform::operator> ( Pair< T1, T2 > const &  lhs,
Pair< T1, T2 > const &  rhs 
)

◆ operator>() [2/2]

template<class T1 , class T2 >
CUTLASS_HOST_DEVICE constexpr bool cutlass::platform::operator> ( const pair< T1, T2 > &  lhs,
const pair< T1, T2 > &  rhs 
)

◆ operator>=() [1/2]

template<typename T1 , typename T2 >
CUTLASS_HOST_DEVICE bool cutlass::platform::operator>= ( Pair< T1, T2 > const &  lhs,
Pair< T1, T2 > const &  rhs 
)

◆ operator>=() [2/2]

template<class T1 , class T2 >
CUTLASS_HOST_DEVICE constexpr bool cutlass::platform::operator>= ( const pair< T1, T2 > &  lhs,
const pair< T1, T2 > &  rhs 
)

◆ polar()

template<typename T >
CUTLASS_HOST_DEVICE complex<T> cutlass::platform::polar ( T const &  r,
T const &  theta = T() 
)

◆ proj()

template<typename T >
CUTLASS_HOST_DEVICE complex<T> cutlass::platform::proj ( complex< T > const &  z)

◆ real() [1/6]

CUTLASS_HOST_DEVICE float const& cutlass::platform::real ( cuFloatComplex const &  z)

◆ real() [2/6]

CUTLASS_HOST_DEVICE float& cutlass::platform::real ( cuFloatComplex &  z)

◆ real() [3/6]

CUTLASS_HOST_DEVICE double const& cutlass::platform::real ( cuDoubleComplex const &  z)

◆ real() [4/6]

CUTLASS_HOST_DEVICE double& cutlass::platform::real ( cuDoubleComplex &  z)

◆ real() [5/6]

template<typename T >
CUTLASS_HOST_DEVICE T const& cutlass::platform::real ( complex< T > const &  z)

◆ real() [6/6]

template<typename T >
CUTLASS_HOST_DEVICE T& cutlass::platform::real ( complex< T > &  z)

◆ sin()

template<typename T >
CUTLASS_HOST_DEVICE complex<T> cutlass::platform::sin ( complex< T > const &  z)

◆ sqrt()

template<typename T >
CUTLASS_HOST_DEVICE complex<T> cutlass::platform::sqrt ( complex< T > const &  z)

◆ swap()

template<typename T , typename Deleter >
void cutlass::platform::swap ( unique_ptr< T, Deleter > &  lhs,
unique_ptr< T, Deleter > &  rhs 
)
noexcept