Skip to Main Content

DevOps, CI/CD and Automation

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Constexpr inherited constructor fails when initializing constexpr array

kovalDec 22 2017 — edited May 17 2018

Calling inherited constexpr constructor compiles fine with normal initialization but fails when constructing array:

#include <cstddef>

class StringRef {

    const char* str;

    size_t len;

public:

    constexpr StringRef(const char* s, size_t l): str{s}, len{l} { }

};

class StringLiteral: public StringRef {

public:

    template<size_t N>

    constexpr StringLiteral(const char (&str)[N]): StringRef{str, N-1}

    {

    }

};

constexpr StringLiteral ok("abcd");  // this works fine

constexpr StringLiteral fail[] = {"abcd"};  // the error comes from here

CC -std=c++14 test.cpp

"test.cpp", line 13: Error: Cannot use unsigned long to initialize const char*.

1 Error(s) detected.

Studio 12.5 compiles this example fine

Also it seems that 12.6 compiles without errors if fail[] is not constexpr

Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Jun 14 2018
Added on Dec 22 2017
3 comments
783 views