是否有可能使用typedef
或using
在概念内部声明类型别名,正如Concepts TS? 如果我尝试像下面MWE,代码不编译(用gcc 6.2.1和-fconcepts
开关)C++概念lite和类型别名声明
#include <type_traits>
template<typename T>
concept bool TestConcept()
{
return requires(T t)
{
using V = T;
std::is_integral<V>::value;
};
}
int main()
{
return 0;
}
产生的错误:
main.cpp: In function ‘concept bool TestConcept()’:
main.cpp:8:9: error: expected primary-expression before ‘using’
using V = T;
^~~~~
main.cpp:8:9: error: expected ‘}’ before ‘using’
main.cpp:8:9: error: expected ‘;’ before ‘using’
main.cpp:4:14: error: definition of concept ‘concept bool TestConcept()’ has multiple statements
concept bool TestConcept()
^~~~~~~~~~~
main.cpp: At global scope:
main.cpp:11:1: error: expected declaration before ‘}’ token
}
^
看起来你想使用'typedef V T;',这会将'T'替换为'V'。 'using'用于调用命名空间的名称空间或特定标识符。下面是一个例子:http://stackoverflow.com/questions/10103453/is-typedef-inside-of-a-function-body-a-bad-programming-practice –
@JamesMurphy对不起,但自从C++ 11你可以使用'using'关键字来表达类型别名,就像你之前用'typedef'所做的那样。以下是参考资料:http://en.cppreference.com/w/cpp/language/type_alias。 – erikzenker
@JamesMurphy该示例也失败了typedef,基本上具有相同的错误消息。正如erikzenker所说,现在的语法应该是相同的。 – Slizzered