Re: constexpr memeber function not constexpt anymore in v10

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 19 Feb 2020, Klaus Doldinger wrote:

Am 19.02.20 um 11:02 schrieb Jonathan Wakely:
On Wed, 19 Feb 2020 at 07:53, Klaus Doldinger
<klaus.doldinger64@xxxxxxxxx> wrote:

The following was possible in v9:

template<auto N>
struct A {
    constexpr auto size() const {
        return N;
    }
};

template<typename A>
void foo(const A& a) {
    constexpr auto s = a.size();
}

int main() {
    A<10> x1;
    foo(x1);
}

In v10 this is rejected.

Looks like a bug?

Clang also rejects it.

No, I don't think so. The parameter a is not a constant expression, so
a.size() is not a constant expression, so can't be used to initialize
a constexpr variable.

Why not make size() static?

That would be weird.
If so, the follwing would be impossible:

   std::array<int, 10> a;
   std::array<int, a.size()> b;

You can still use decltype and tuple_size to access that information.

--
Marc Glisse



[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux