// --------------------
// UserDefinedTypes.c++
// --------------------
#include <cassert> // assert
#include <iostream> // cin, cout, endl
#include <deque> // deque
#include <list> // list
#include <map> // map
#include <queue> // priority_queue, queue
#include <set> // set
#include <stack> // stack
#include <string> // string
#include <vector> // vector
template <typename T>
struct A {
int i;
double d;
T x;};
enum Color {red, green, blue};
int main () {
using namespace std;
cout << "UserDefinedTypes.c++" << endl;
assert(sizeof(istream) == 144);
assert(sizeof(ostream) == 140);
assert(sizeof(string) == 4);
assert(sizeof(vector<int>) == 12);
assert(sizeof(deque<int>) == 40);
assert(sizeof(list<int>) == 8);
assert(sizeof(stack<int>) == 40);
assert(sizeof(queue<int>) == 40);
assert(sizeof(priority_queue<int>) == 16);
assert(sizeof(set<int>) == 24);
assert(sizeof(map<int, double>) == 24);
assert(sizeof(Color) == 4);
assert(sizeof(A<int>) == 16);
assert(sizeof(A<double>) == 20);
// assert(sizeof(A<A<int>>) == 28); // error: ">>" should be "> >" within a nested template argument list
assert(sizeof(A< A<int> >) == 28);
cout << "Done." << endl;
return 0;}
syntax highlighted by Code2HTML, v. 0.9.1