Các hàm ảo không thể là constexpr
tuy nhiên, khi một hàm ảo hoàn toàn thông qua kế thừa, các trình biên dịch tôi đã thử không phàn nàn về nó.Hàm constexpr ảo hoàn toàn
Dưới đây là một số mẫu mã:
class A
{
virtual void doSomething() {}
};
class B : public A
{
constexpr void doSomething() override {} // implicitly virtual constexpr
// but no compilation error
};
class C : public A
{
virtual constexpr void doSomething() override {} // explicitly virtual constexpr
// compilation error
};
Tôi đã thử nó với gcc 7.2.0
và .clang 5.0.0
Các trình biên dịch đó có tuân thủ tiêu chuẩn trong lĩnh vực này hay không hoặc các hàm ảo được cho phép là constexpr
?
[Phiên bản này của tiếng kêu vang có vẻ phàn nàn] (http://coliru.stacked-crooked.com/a/a3d1b1ef2348d2c2) – Borgleader
hãy kiểm tra lại clang –
Đúng vậy, tôi đã sai về clang – MaxV37