// PR c++/101715
// { dg-do compile { target c++11 } }
template <typename T> struct S {
  S<T> bar() noexcept(T::value);  // #1
  S<T> foo() noexcept(T::value);  // #2
};
template <typename T> S<T> S<T>::foo() noexcept(T::value) {}  // #3
template <typename T> struct S2 {
  S2<T> bar1() noexcept(T::value);
  S2<T> bar2() noexcept(T::value);
  S2<T> bar3() noexcept(T::value);
  S2<T> bar4() noexcept(T::value);
  S2<T> bar5() noexcept(T::value);
  S2<T> baz() noexcept(T::value2);
  S2<T> foo() noexcept(T::value);
};
template <typename T> S2<T> S2<T>::foo() noexcept(T::value) {}