ゆとりーなの日記

日記的な事を書いて行くと思はれる

staticなconstexprメンバ変数を函数の引数に入れると詰むことがある

まぁ要するにこういうコードです。

template <typename T>
struct Hoge_ {
  static constexpr Hoge_ hoge{0};

 private:
  constexpr explicit Hoge_(int i) : val(i) {}

  int val;
};

using Hoge = Hoge_<void>;

void Foo(Hoge h) {}

int main() {
  Foo(Hoge::hoge);
}

Hoge::hogeが undefined reference といわれるんですね。
因みに一度局所変数で受けてから突っ込むとこのリンクエラーは消えます。

int main() {
  constexpr auto h = Hoge::hoge;
  Foo(h);
}