関数において整数定数テンプレートを付加した際に発生するいくつかの構文エラーについて2つ質問です.

①operator()の整数定数テンプレートの明示の際のシンタックスエラー

#include<iostream>
struct object{
    template<std::size_t index>
    void operator()(){ std::cout << index << std::endl;}
}

int main(){
    object obj;
    obj<1>(); //ill-formed (obj < 1)のoperator<未定義エラー
    obj.operator()<1>(); //ok
}

なぜか obj<1>(); において, obj<1 が先に評価され, 整数とobjectの比較と判断されてしまうエラーがあります,これは規格どおりなのでしょうか,それともバグでしょうか.
ちなみにobj.operator()<1>(); は動きます.

②整数定数テンプレートメンバ関数において, 可変長引数テンプレートが正常に扱えない

#include<iostream>

struct X{
    template<size_t t>
    void f(int a){
        std::cout << t << a << std::endl;   
    }
};

template <class S,typename ...Params>
void f(S&& s,Params&&... params)
{
    s.f<10>(std::forward<Params>(params)...); // error: expected ')' , expression contains unexpanded parameter packs 'Params'
  and 'params'

    s.f<10>(std::forward<Params...>(params...)); // error: reference to non-static member function must be called

    s.f<10>(params...); // error: expected ')'
}

int main(){
    f(X(),4);
    return 0;
}


②.1 本来なら構文的に合っているunpack演算子が無効, または全然関係のないところでexpected')'
②.2 意味のわからないnon-static function callエラー
③.3 全然関係のないところで expected')'

以上です.
コンパイラのバグか, 仕様書どおりか, もしくは自分の構文ミスなのか全く判別がつきません.
知識人の方, 一つでも心当たりがあれば是非お願いいたします.

よろしくお願いします.

環境(gcc及びLLVM)