https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110323

--- Comment #6 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
Extended test.  I think all 4 should be emitted.

```
// PR c++/110323

template<bool B, class T, class F>
struct conditional { using type = T; };

template<class T, class F>
struct conditional<false, T, F> { using type = F; };

constexpr int VAL = 1;

static constexpr int getval () { return 1; }

template<typename>
constexpr int TVAL = 1;

static struct S {
  constexpr operator bool() { return true; }
} s;

struct foo {
    template <int B>
    void bar(typename conditional<B == VAL, int, float>::type arg) { }

    template <int B>
    void baz(typename conditional<B == getval (), int, float>::type arg) { }

    template <int B>
    void qux(typename conditional<B == TVAL<int>, int, float>::type arg) { }

    template <int B>
    void lox(typename conditional<B == s, int, float>::type arg) { }
};

template void foo::bar<1>(int arg);
template void foo::baz<1>(int arg);
template void foo::qux<1>(int arg);
template void foo::lox<1>(int arg);
```

Reply via email to