ibm i 7.3上初始化constexpr编译时间数组的错误

时间:2018-11-12 10:09:45

标签: c++ ibm-midrange constexpr

由于在ibm上进行了特定的IO处理,因此我需要使用显示文件字段IO。

如下所示,我们需要为显示文件值编译时间结构。

查看constexpr之后,我决定尝试使用here的一些cpp +模板解决方案。

我的案例的最终代码如下:

MYSRC / MYMOD.CPP

#include "MYSRC/MODINCH"

template <int N>
constexpr_string<N> make_constexpr_string(const char(&a)[N]) {
    // Provide a function template to deduce N           ^ right here
return constexpr_string<N>(a);
    //                     ^ Forward the parameter to the class template.
};
int main(int argc, char** argv)
{
    return 0;
}

MYSRC / MODINCH.H

#include <algorithm>

   #define __IBMCPP_TR1__ 1
#include <QSYSINC/STD(array)>

 using std::size_t;

template <size_t N> // N is the capacity of my string.
class constexpr_string {
private:
    //std::tr1::array<char, N> data_; // Reserve N chars to store anything.  
    char data_[N];
    std::size_t size_;         // The actual size of the string.
public:
    constexpr constexpr_string(const char(&a)[N]): data_{}, size_(N - 1)
    {
        for (std::size_t i = 0; i < N; ++i) {
            data_[i] = a[i];
        }
    }
    constexpr iterator begin() {  return data_;   }       // Points at the beggining of the storage.
    constexpr iterator end() {  return data_ + size_;   } // Points at the end of the stored string.

};

上面的代码用

编译
CRTCPPMOD MODULE(QTEMP/MYMOD) SRCFILE(MYLIB/MYSRC) SRCMBR(MYMOD)
OPTIMIZE(40) DBGVIEW(*ALL) LANGLVL(*EXTENDED0X)

对于char data_[N];std::tr1::array<char, N> data_;

但是,当我尝试像这样填充constexpr_string的实例时:

#include "MYSRC/MODINCH"

template <int N>
constexpr_string<N> make_constexpr_string(const char(&a)[N]) {
    // Provide a function template to deduce N           ^ right here
return constexpr_string<N>(a);
    //                     ^ Forward the parameter to the class template.
};
int main(int argc, char** argv)
{
auto test1 = make_constexpr_string("blabla");
constexpr_string<7> test("blabla");
return 0;
}

错误立即导致此消息编译失败 CZP0063(30) The text "constexpr_string" is unexpected.就在ctor行。在我看来,在这种情况下,编译器无法确定constexpr关键字,但是为什么呢?

我是不是在代码的某个地方弄乱了,还是目前不支持这种用法?

Here是ibm编译器支持的功能,而IBM XLC ++则支持constexpr,据我可以从给定的表中得出。

2 个答案:

答案 0 :(得分:0)

鉴于此标签为ibm-midrange,所以我不确定IBM XLC ++的功能部件是否适合使用。我认为您想改用this。特别是如果您要使用C ++ 0x功能(尚不完全支持),则需要使用LANGLVL(*EXTENDED0X)进行编译。

有关更多信息,this link显示了有关对ILE C ++ 0x语言扩展的支持的信息。

答案 1 :(得分:0)

我无法在ibm-midrange系统上对此进行验证,因为我没有访问那里的CPP编译器的权限,但是我认为我已经找到了您的问题:

#include "MYSRC/MODINCH"
template <int N>
constexpr_string<N> make_constexpr_string;  // <------ You are missing this semicolon
...
int main(int argc, char** argv)
{
    auto test1 = make_constexpr_string("blabla");
    constexpr_string<7> test("blabla");
    return 0;
}