#include <iostream>
#include <type_traits>
class A {
public:
A() {}
A(const A&) {}
A(int) {}
};
class B{};
template<typename T>
typename std::enable_if
< std::is_base_of<A, T>::value
, A >::type
operator+(T& lhs,int rhs){
typename std::enable_if
< std::is_base_of<A, T>::value
, A >::type ret;
// stuff
return ret;
}
int main() {
A u;
A v = u+1;
}
CSNpbmNsdWRlIDxpb3N0cmVhbT4KCSNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KCQoJY2xhc3MgQSB7CglwdWJsaWM6CgkgICBBKCkge30KCSAgIEEoY29uc3QgQSYpIHt9CgkgICBBKGludCkge30KCX07CgkKCWNsYXNzIEJ7fTsKCQoJdGVtcGxhdGU8dHlwZW5hbWUgVD4KCXR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmCgkJPCBzdGQ6OmlzX2Jhc2Vfb2Y8QSwgVD46OnZhbHVlCgkJLCBBID46OnR5cGUKCW9wZXJhdG9yKyhUJiBsaHMsaW50IHJocyl7CgkJdHlwZW5hbWUgc3RkOjplbmFibGVfaWYKCQk8IHN0ZDo6aXNfYmFzZV9vZjxBLCBUPjo6dmFsdWUKCQksIEEgPjo6dHlwZSByZXQ7CgkgICAgLy8gc3R1ZmYKCSAgICByZXR1cm4gcmV0OwoJfQoKICAgIGludCBtYWluKCkgewoJICBBIHU7CgkgIEEgdiA9IHUrMTsKCX0K