C++20 コンセプトで、特定の戻り値の型を持つメンバ関数を持つことを要求するにはどのようにすべきですか？


A.f()はintを返していますが、もしコメントアウト部が入っているコードの場合は、boolでなければコンパイルエラーになります。これをコンセプトで要求したい（f()の戻り値をboolであることを要求したい)場合はどのようにすべきでしょうか？

[code]

    #include <iostream>
    #include <string>
    #include <concepts>
    
    struct A{
        int f()
        {
            return 42;
        }
    };
    
    template<class T>
    concept Printable = requires(T t){
        t.f();
    };
    
    template<typename T>
    void PrintIfPrintable(T arg)
    {
        if constexpr (Printable<T>){
            //bool a {arg.f()}; // コンパイルエラー
            std::cout << arg.f() << std::endl;
        }
    }
    
    int main()
    {
        PrintIfPrintable(A());
    }
    
[/code]




[`std::same_as`コンセプト](https://cpprefjp.github.io/reference/concepts/same_as.html)を使用して`t.f()`の戻り値が`bool`か判定する感じでしょうか？

[code]

    template<class T>
    concept Printable = std::same_as<decltype(std::declval<T>().f()), bool>;
    
[/code]




[`std::same_as`コンセプト](https://cpprefjp.github.io/reference/concepts/same_as.html)を使用して`t.f()`の戻り値が`bool`か判定する感じでしょうか？

[code]

    template<class T>
    concept Printable = std::same_as<decltype(std::declval<T>().f()), bool>;
    
[/code]

