当前位置:  开发笔记 > 编程语言 > 正文

概念和声明顺序

如何解决《概念和声明顺序》经验,为你挑选了0个好方法。

我一直在试验SVN的GCC中的概念精简版.我遇到了一个问题,我怀疑是因为我缺乏理解,如果有人能指出我正确的方向,我会很感激.我的代码是:

#include 
#include 

// Uncomment this declaration to change behaviour
//void draw(const std::string&);

template 
concept bool Drawable() {
    return requires (const T& t) {
        { draw(t) }
    };
}

void draw(const std::string& s)
{
    std::cout << s << "\n";
}

int main()
{
    static_assert(Drawable()); // Fails
}

在这里,我定义了一个简单的概念,Drawable它旨在要求给定一个类型的参数const T&,函数draw(t)编译.

然后我定义了一个draw(const std::string&)"绘制"字符串的函数cout.最后,我检查是否std::string匹配Drawable概念 - 我预期它会做什么,因为调用draw()时适当的函数在范围内static_assert.

但是,静态断言失败,除非我在概念定义draw(const std::string&) 之前包含声明,并且我不知道为什么.

这是概念的预期行为,还是我做错了什么?

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有