#include <iostream>
#include <utility>
struct String {
String(){
std::cout << " String default ctor\n";
};
String(const String& s) {
std::cout << " String copy\n";
}
String(String&& s) {
std::cout << " String move\n";
}
~String() {
std::cout << " String dtor\n";
}
};
struct Texture_MrShoor {
String m_name;
Texture_MrShoor(String name) : m_name(std::move(name)) {};
};
struct Texture_ALX {
String m_name;
template<class T>
Texture_ALX(T && name) : m_name(std::forward<T>(name)) {};
};
String GetFullPath() {
return String();
}
template <typename T>
T LoadTexture( const String &some ) {
return T( some );
}
int main()
{
{
std::cout << "LoadTexture (MrShoor case)\n";
Texture_MrShoor t = LoadTexture<Texture_MrShoor>( String() );
}
{
std::cout << "LoadTexture (ALX case)\n";
Texture_ALX t = LoadTexture<Texture_ALX>( String() );
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dXRpbGl0eT4KCnN0cnVjdCBTdHJpbmcgewogICAgU3RyaW5nKCl7CiAgICAgICAgc3RkOjpjb3V0IDw8ICIgIFN0cmluZyBkZWZhdWx0IGN0b3JcbiI7CiAgICB9OwogICAgU3RyaW5nKGNvbnN0IFN0cmluZyYgcykgewogICAgICAgIHN0ZDo6Y291dCA8PCAiICBTdHJpbmcgY29weVxuIjsKICAgIH0KICAgIFN0cmluZyhTdHJpbmcmJiBzKSB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICIgIFN0cmluZyBtb3ZlXG4iOwogICAgfQogICAgflN0cmluZygpIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgIiAgU3RyaW5nIGR0b3JcbiI7CiAgICB9Cn07CgpzdHJ1Y3QgVGV4dHVyZV9NclNob29yIHsKICAgIFN0cmluZyBtX25hbWU7CiAgICBUZXh0dXJlX01yU2hvb3IoU3RyaW5nIG5hbWUpIDogbV9uYW1lKHN0ZDo6bW92ZShuYW1lKSkge307Cn07CgpzdHJ1Y3QgVGV4dHVyZV9BTFggewogICAgU3RyaW5nIG1fbmFtZTsKICAgIHRlbXBsYXRlPGNsYXNzIFQ+CiAgICBUZXh0dXJlX0FMWChUICYmIG5hbWUpIDogbV9uYW1lKHN0ZDo6Zm9yd2FyZDxUPihuYW1lKSkge307Cn07CgpTdHJpbmcgR2V0RnVsbFBhdGgoKSB7CiAgICByZXR1cm4gU3RyaW5nKCk7Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgpUIExvYWRUZXh0dXJlKCBjb25zdCBTdHJpbmcgJnNvbWUgKSB7CiAgICByZXR1cm4gVCggc29tZSApOwp9CgppbnQgbWFpbigpCnsKICAgIHsKICAgICAgc3RkOjpjb3V0IDw8ICJMb2FkVGV4dHVyZSAoTXJTaG9vciBjYXNlKVxuIjsKICAgICAgVGV4dHVyZV9NclNob29yIHQgPSBMb2FkVGV4dHVyZTxUZXh0dXJlX01yU2hvb3I+KCBTdHJpbmcoKSApOwogICAgfQogICAgewogICAgICBzdGQ6OmNvdXQgPDwgIkxvYWRUZXh0dXJlIChBTFggY2FzZSlcbiI7CiAgICAgIFRleHR1cmVfQUxYIHQgPSBMb2FkVGV4dHVyZTxUZXh0dXJlX0FMWD4oIFN0cmluZygpICk7CiAgICB9CiAgICByZXR1cm4gMDsKfQ==