C++ named requirements: NumericType
From cppreference.com
                    
                                        
                    
                    
                                                            
                    Specifies that the type can be used as the template argument of std::valarray
Requirements
for a type T to be an NumericType:
-  
Tcannot be a reference -  
Tcannot be cv-qualified -  If 
Tis a class, it 
- does not overload operator&
 - has no pure virtual member functions (is not abstract)
 - has a public default constructor
 - has a public copy constructor T::T(const T&)
 - has a public destructor
 - has a public assignment operator T& T::operator=(const T&) or T& T::operator=(T)
 - default constructor followed by assignment has the same effect as copy constructor
 -  copy constructor with the value 
T()has the same effect as value-initialization - destructor followed by copy constructor has the same effect as assignment
 
-  No operation on 
Tmay throw exceptions