#include <iostream>
using namespace std;
template <typename T>
class DoubleBuffer {
public:
using value_type = T;
using reference = T&;
using const_reference = T const &;
using const_type = const typename T::type;
using pointer = T*;
//...
};
template <typename T>
struct Dummy {
using type = T;
};
int main() {
Dummy<int> dummy;
DoubleBuffer<Dummy<int>>::value_type vt = dummy;
DoubleBuffer<Dummy<int>>::reference ref = dummy;
DoubleBuffer<Dummy<int>>::const_reference cref = dummy;
DoubleBuffer<Dummy<int>>::const_type ct = 12345;
DoubleBuffer<Dummy<int>>::pointer p = &dummy;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmNsYXNzIERvdWJsZUJ1ZmZlciB7CnB1YmxpYzoKICAgIHVzaW5nIHZhbHVlX3R5cGUgPSBUOwogICAgdXNpbmcgcmVmZXJlbmNlID0gVCY7CiAgICB1c2luZyBjb25zdF9yZWZlcmVuY2UgPSBUIGNvbnN0ICY7CiAgICB1c2luZyBjb25zdF90eXBlID0gY29uc3QgdHlwZW5hbWUgVDo6dHlwZTsKICAgIHVzaW5nIHBvaW50ZXIgPSBUKjsKICAgIC8vLi4uCn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kc3RydWN0IER1bW15IHsKCXVzaW5nIHR5cGUgPSBUOwp9OwoKaW50IG1haW4oKSB7CiAgICBEdW1teTxpbnQ+IGR1bW15OwogICAgRG91YmxlQnVmZmVyPER1bW15PGludD4+Ojp2YWx1ZV90eXBlIHZ0ID0gZHVtbXk7CiAgICBEb3VibGVCdWZmZXI8RHVtbXk8aW50Pj46OnJlZmVyZW5jZSByZWYgPSBkdW1teTsKICAgIERvdWJsZUJ1ZmZlcjxEdW1teTxpbnQ+Pjo6Y29uc3RfcmVmZXJlbmNlIGNyZWYgPSBkdW1teTsKICAgIERvdWJsZUJ1ZmZlcjxEdW1teTxpbnQ+Pjo6Y29uc3RfdHlwZSBjdCA9IDEyMzQ1OwogICAgRG91YmxlQnVmZmVyPER1bW15PGludD4+Ojpwb2ludGVyIHAgPSAmZHVtbXk7CgoJcmV0dXJuIDA7Cn0=