Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- template<typename T>
- struct A {
- using ARet = T;
- virtual ~A() = default;
- ARet foo();
- virtual ARet bar() = 0;
- };
- template<typename T>
- T A<T>::foo() { // OK, return type matches that in the declaration (T = ARet)
- return 42;
- }
- template<typename T>
- struct B : A<T> {
- using BaseType = A<T>;
- using BRet = typename BaseType::ARet;
- BRet bar() override;
- };
- template<typename T>
- T B<T>::bar() { // Error, return type differs from that in the declaration ( but T = BRet = ARet ??? )
- return 42;
- }
- template<typename T>
- typename B<T>::BRet B<T>::bar() { // OK
- return 42;
- }
- template<typename T>
- auto B<T>::bar() -> BRet {
- return 42;
- }
- template<>
- struct A<int> {
- using ARet = void;
- //...
- };
Add Comment
Please, Sign In to add comment