Первое условие работает правильно, если t является символом char * или классом, который переопределяет оператор char *() неявно или явно. Цель второго условия состоит в том, чтобы выполнить код в скобках, когда тип t является указателем, а разыменованный тип t может быть преобразован в char *. Второе условие не выполняется, когда оно должно (например, t char ** должно оцениваться как true). Что я делаю не так?Как получить тип аргумента шаблона, когда он состоит из указателя?
F.Y.I .: Меня интересует только один указатель на то, что может быть конвертировано в char * как char ** и не связано с char ***, если это имеет смысл.
t * Find(char * name)
{
if (std::is_convertible<t, char*>::value)
{
return 0;
}
else if (std::is_convertible<typename std::remove_pointer<t>::type, char * >::value)
{
return 0;
}
static_assert(false, "VSarray<T>::Find(char *), T is not convertable to a char *");
}
Если вы ставите неудачу при статическом утверждении, она будет срабатывать каждый раз, независимо от того, какая ветка была бы взята. – chris
Можете ли вы представить полный пример, демонстрирующий вашу проблему? Кроме того, условия ваших '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' – melak47
@chris вы были правы, я должен был изменить условие внутри статического утверждения до повторного тестирования. – user3141117