#include <iostream>
using namespace std;
template <typename T>
class Decoder {
T* impl_;
public:
Decoder();
};
class DecoderA;
class DecoderB;
int main() {
Decoder<DecoderA> a;
Decoder<DecoderB> b;
return 0;
}
template <typename T>
Decoder<T>::Decoder () { impl_ = new T; }
class DecoderA {};
class DecoderB {};
template class Decoder<DecoderA>;
template class Decoder<DecoderB>;
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmNsYXNzIERlY29kZXIgewogIFQqIGltcGxfOwogIHB1YmxpYzoKICAgIERlY29kZXIoKTsKfTsKCmNsYXNzIERlY29kZXJBOwpjbGFzcyBEZWNvZGVyQjsKCmludCBtYWluKCkgewoJRGVjb2RlcjxEZWNvZGVyQT4gYTsKCURlY29kZXI8RGVjb2RlckI+IGI7CglyZXR1cm4gMDsKfQoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CkRlY29kZXI8VD46OkRlY29kZXIgKCkgeyBpbXBsXyA9IG5ldyBUOyB9CgpjbGFzcyBEZWNvZGVyQSB7fTsKY2xhc3MgRGVjb2RlckIge307Cgp0ZW1wbGF0ZSBjbGFzcyBEZWNvZGVyPERlY29kZXJBPjsKdGVtcGxhdGUgY2xhc3MgRGVjb2RlcjxEZWNvZGVyQj47CgoK