The std::is_compound template of C++ STL is used to check the whether the type is a compound type or not. It returns a boolean value showing the same.
Syntax:
template < class T > struct is_compound;
Parameter: This template contains single parameter T (Trait class) to check whether T is a compound type or not.
Return Value: This template returns a boolean value as shown below:
- True: if the type is a compound type.
- False: if the type is a non-compound type.
Below programs illustrate the is_compound template in C++ STL:
Program 1:
// C++ program to illustrate // is_compound template #include <iostream> #include <type_traits> using namespace std;
// main program struct GFG1 {
}; union GFG2 {
int var1;
float var2;
}; int main()
{ cout << boolalpha;
cout << "is_compound:"
<< endl;
cout << "GFG1: "
<< is_compound<GFG1>::value
<< endl;
cout << "GFG2: "
<< is_compound<GFG2>::value
<< endl;
cout << "int: "
<< is_compound< int >::value
<< endl;
cout << "int*: "
<< is_compound< int *>::value
<< endl;
return 0;
} |
Output:
is_compound: GFG1: true GFG2: true int: false int*: true
Program 2:
// C++ program to illustrate // is_compound template #include <iostream> #include <type_traits> using namespace std;
class GFG1 {
}; enum class GFG2 { var1,
var2,
var3,
var4
}; // main program int main()
{ cout << boolalpha;
cout << "is_compound:"
<< endl;
cout << "GFG1: "
<< is_compound<GFG1>::value
<< endl;
cout << "GFG2: "
<< is_compound<GFG2>::value
<< endl;
cout << "int[10]: "
<< is_compound< int [10]>::value
<< endl;
cout << "int &: "
<< is_compound< int &>::value
<< endl;
cout << "char: "
<< is_compound< char >::value
<< endl;
return 0;
} |
Output:
is_compound: GFG1: true GFG2: true int[10]: true int &: true char: false
Program 3:
// C++ program to illustrate // is_compound template #include <iostream> #include <type_traits> using namespace std;
// driver code int main()
{ class gfg {
};
cout << boolalpha;
cout << "is_compound:"
<< endl;
cout << "int(gfg::*): "
<< is_compound< int (gfg::*)>::value
<< endl;
cout << "float: "
<< is_compound< float >::value
<< endl;
cout << "double: "
<< is_compound< double >::value
<< endl;
cout << "int(int): "
<< is_compound< int ( int )>::value
<< endl;
return 0;
} |
Output:
is_compound: int(gfg::*): true float: false double: false int(int): true