This documentation is archived and is not being maintained.
common_type Class
Visual Studio 2013
Determines the common type of one or more types.
template <class... T>
struct common_type;
template <class T>
struct common_type<T> {
typedef typename decay<T>::type type;
};
template <class T, class U>
struct common_type<T, U> {
typedef typename decay<decltype(true ? declval<T>() :
declval<U>())>::type type;
};
template <class T, class U, class... V>
struct common_type<T, U, V...> {
typedef typename common_type<typename common_type<T, U>::type, V...>::type type;
};
List of types that are either complete types or void.
The following program demonstrates some correct usage scenarios and tests for results.
// Compile using cl.exe /EHsc // common_type sample #include <iostream> #include <type_traits> struct Base {}; struct Derived : Base {}; int main() { typedef std::common_type<unsigned char, short, int>::type NumericType; typedef std::common_type<float, double>::type FloatType; typedef std::common_type<const int, volatile int>::type ModifiedIntType; typedef std::common_type<Base, Derived>::type ClassType; std::cout << std::boolalpha; std::cout << "Test for typedefs of common_type int" << std::endl; std::cout << "NumericType: " << std::is_same<int, NumericType>::value << std::endl; std::cout << "FloatType: " << std::is_same<int, FloatType>::value << std::endl; std::cout << "ModifiedIntType: " << std::is_same<int, ModifiedIntType>::value << std::endl; std::cout << "ClassType: " << std::is_same<int, ClassType>::value << std::endl; std::cout << "---------------------------" << std::endl; std::cout << "Test for typedefs of common_type double" << std::endl; std::cout << "NumericType: " << std::is_same<double, NumericType>::value << std::endl; std::cout << "FloatType: " << std::is_same<double, FloatType>::value << std::endl; std::cout << "ModifiedIntType: " << std::is_same<double, ModifiedIntType>::value << std::endl; std::cout << "ClassType: " << std::is_same<double, ClassType>::value << std::endl; std::cout << "---------------------------" << std::endl; std::cout << "Test for typedefs of common_type Base" << std::endl; std::cout << "NumericType: " << std::is_same<Base, NumericType>::value << std::endl; std::cout << "FloatType: " << std::is_same<Base, FloatType>::value << std::endl; std::cout << "ModifiedIntType: " << std::is_same<Base, ModifiedIntType>::value << std::endl; std::cout << "ClassType: " << std::is_same<Base, ClassType>::value << std::endl; return 0; }
Test for typedefs of common_type int NumericType: true FloatType: false ModifiedIntType: true ClassType: false --------------------------- Test for typedefs of common_type double NumericType: false FloatType: true ModifiedIntType: false ClassType: false --------------------------- Test for typedefs of common_type Base NumericType: false FloatType: false ModifiedIntType: false ClassType: true
Show: