Czy można użyć typedef
lub using
, aby zadeklarować alias typu wewnątrz koncepcji, zgodnie z propozycją TS Koncepcji? Gdy próbuję coś jak następuje MWE, kod nie skompilować (z gcc 6.2.1 i przełącznikiem -fconcepts
)C++ koncepcje deklaracja aliasu typu lite i type
#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;
}
wynikających błąd:
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
}
^
Wygląda na to, że chciałbyś użyć 'typedef V T;', które byłoby alias 'T' na' V'. 'using' służy do wywoływania przestrzeni nazw lub określonych identyfikatorów z przestrzeni nazw. Oto przykład: http://stackoverflow.com/questions/10103453/is-typedef-inside-ofunction-body-a-bad-programming-practice –
@JamesMurphy przepraszam, ale ponieważ C++ 11 możesz użyj słowa kluczowego 'using' do wyrażenia aliasów typu, tak jak przedtem z' typedef'. Oto odniesienie: http://en.cppreference.com/w/cpp/language/type_alias. – erikzenker
@JamesMurphy przykład również kończy się niepowodzeniem z typedef, zasadniczo z tym samym komunikatem o błędzie. Jak powiedział erikzenker, składnia powinna być obecnie odpowiednikiem. – Slizzered