Skip to content

Can some code from book actually complie? #9

@JalanChao

Description

@JalanChao
#include <iostream>
#include <type_traits>

template < bool AddOrRemoveRef >
struct Fun_;

template <>
struct Fun_< true > {
    template < typename T >
    using type = std::add_lvalue_reference< T >;
};

template <>
struct Fun_< false > {
    template < typename T >
    using type = std::remove_reference< T >;
};

// 注意这里的高级用法
template < typename T >
template < bool AddOrRemoveRef >
using Fun = typename Fun_< AddOrRemoveRef >::template type< T >; //error

// 即使是有别名,还是需要显式说明模板
template < typename T >
using Res_ = Fun< false >;

int main()
{
    Res_< int& >::type h = 3;
    std::cout << h << std::endl;
    return 0;
}

I have tested these code with clang14 and gcc11 and gcc9 all failed.
[{
"resource": "/root/code/cpp/vscode/Books/TemplateMetaProgrammingPractice/1.2.1templateAsMetaFucntionInput.cpp",
"owner": "generated_diagnostic_collection_name#1",
"code": "alias_template_extra_headers",
"severity": 8,
"message": "Extraneous template parameter list in alias template declaration",
"source": "clang",
"startLineNumber": 22,
"startColumn": 1,
"endLineNumber": 22,
"endColumn": 6
}]

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions