Remote virtual functions are allowed, but cannot be overridden.
§10.3 (11) says:
A virtual function declared in a class must be defined as , or declared pure (10.4) in this class, or both; but no diagnosis is required (3.2).
§8.4.1 says that a remote function is defined .
And §10.3 (16) says:
A function with a remote definition (8.4) must not override a function that does not have a remote definition. Similarly, a function that does not have a remote definition must not override a function with a remote definition.
The purpose of this last rule is to provide diagnostics for calling a remote function at compile time.
Thus, the following code is poorly formed:
struct Base { virtual void foo(); }; struct Derived : public Base { virtual void foo() = delete; };
But the following code is correctly generated:
struct Base { virtual void foo() = delete; }; struct Derived : public Base { virtual void foo() = delete; };
Demo
The OP had either a compiler error or a QoI problem (it’s hard to say because it did not publish all the code), which has since been fixed.
source share