// --------------------
// 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