35853


この3, 4行目が無いとfunction_traits is not a class
templateというコンパイル時エラーが出るのですが、これが無いと駄目な理由がわかりません。コンパイラはgcc7です。

[code]

    #include <iostream>
    
    template <typename Signature>
    struct function_traits;
    
    template <typename R> \
    struct function_traits<R()> \
    { \
      typedef R return_type; \
    };
    
    using namespace std;
    
    function_traits<int()>::return_type main()
    {
      cout << "Hello, World!" << endl;
      return 0;
    }
    
[/code]


CC BY-SA 3.0
2017-06-24T07:54:48.403
35852
2017-06-24T08:02:59.330
23993
question
c++
C++のテンプレートについて


元はマクロか何かでしょうか？ `\`は不要です。

`template <typename R> struct function_traits<R()>`は`template <typename
Signature> struct
function_traits`の[部分特殊化](https://ja.wikipedia.org/wiki/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%81%AE%E9%83%A8%E5%88%86%E7%89%B9%E6%AE%8A%E5%8C%96)です。  
ですので、元のテンプレートとして必要です。

なお、`function_traits`は[`std::result_of`](https://cpprefjp.github.io/reference/type_traits/result_of.html)そのものですね。


CC BY-SA 3.0
2017-06-24T08:02:59.330
35853
2017-06-24T08:02:59.330
4236
35852
answer