// PR c++/100101
// { dg-do compile { target c++11 } }
template <typename T> struct A
{
    template <typename U> static char foo(U*, int* = 0);
    static const bool value = sizeof(foo(static_cast<T*>(nullptr))) > 0;
};
template <bool b> struct B
{
    static const bool value = b;
};
template <typename T> struct C
{
    typedef B<A<T>::value> type;
};
template <typename T>
void bar() noexcept(A<T>::value && C<T>::type::value) {}
void baz()
{
  bar<void>();
}