2017-05-09 2 views
0

私は、次の最小限の例のようなコードを使用します。型テンプレートパラメータがないため、サイズがゼロの配列を持つクラステンプレート:警告を防ぐ方法?

#include <stdint.h> 

constexpr uint8_t size = 0; // sort of global config option 

template<typename T = char, uint8_t L = size> 
struct A { 
    T f() { 
     if constexpr(L > 0) { 
      return data[0]; 
     } 
     return T{0}; 
    } 
    int x = 0; 
    T data[L]; 
}; 

int main() { 
    A x; 
    x.f(); 
} 

は今、私は-pedanticするように設定をコンパイラ(G ++)を変更し、私は次の警告を得る:これは絶対に大丈夫です

ISO C++ forbids zero-size array [-Wpedantic]

をしかし、私はこのメッセージをどうやって防ぐことができるのだろうか?あなたはL == 0ケースのためのあなたのA構造体を特殊化でき

+3

あなたは警告を無効にしたい場合、または 'サイズ== 0 'メンバーを持っていませんか? – Jarod42

+0

メンバーを省略するのが最善の方法だと思います。 – wimalopaan

答えて

6

template <typename T> 
struct A<T, 0> 
{ 
    T f() { return {0}; } 
}; 
関連する問題