Возможно ли использовать typedef
или using
, чтобы объявить псевдоним типа внутри концепции, как это предлагается концепциями TS? Если я пытаюсь что-то вроде следующего MWE, код не компилируется (с GCC 6.2.1 и переключателем -fconcepts
)C++ concept 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' to' V'. 'использование' предназначен для вызова пространств имен или определенных идентификаторов из пространства имен. Вот пример: http://stackoverflow.com/questions/10103453/is-typedef-inside-of-a-function-body-a-bad-programming-practice –
@JamesMurphy извините, но так как C++ 11 вы можете используйте ключевое слово 'use', чтобы выразить псевдонимы типов, как вы делали это раньше, с помощью' typedef'. Вот ссылка: http://en.cppreference.com/w/cpp/language/type_alias. – erikzenker
@JamesMurphy пример также терпит неудачу с typedef, в основном с тем же сообщением об ошибке. Как сказал erikzenker, синтаксис должен быть эквивалентным в наши дни. – Slizzered