
struct X {

	// OKAY: Both comments are before the declaration

	/** Comment for templated variant */
	template< class T > typename T::Y okay() { return T::Y(); }

	/** Comment for non-templated variant */
	bool okay();

	// NOT_OKAY1: One comment at declaration one at definition

	/** Comment for templated variant */
	template< class T > typename T::Y not_okay1() { return T::Y(); }
	bool not_okay1();

	// NOT_OKAY2: Both comments at definition

	template< class T > typename T::Y not_okay2();
	bool not_okay2();
};

/** Comment for non-templated variant */
bool X::not_okay1(){ return true; }

/** Comment for templated variant */
template< class T > typename T::Y X::not_okay2() { return T::Y(); }

/** Comment for non templated variant */
bool X::not_okay2() { return true; }
