С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++

Войти
Регистрация
Восстановить пароль
 
gray_fox
What a waste!
1522 / 1227 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
#1

Функции-члены с "ref-qualifier" - C++

26.08.2013, 01:48. Просмотров 584. Ответов 2

Собственно, компилируя с помощью g++ 4.8.1 следующий код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <type_traits>
 
 
int main() {
   struct dummy {
      
      void one() {}
 
      void two() & {}
 
      void three() && {}
   };
 
   std::cout << std::boolalpha;
   std::cout << std::is_member_function_pointer<decltype(&dummy::one)>::value << std::endl;
   std::cout << std::is_member_function_pointer<decltype(&dummy::two)>::value << std::endl;
   std::cout << std::is_member_function_pointer<decltype(&dummy::three)>::value << std::endl;
}
http://ideone.com/Z0t2Cp
получаю вывод
Код
true
false
false
т.е. &dummy::two и &dummy::three - это как бы уже и не указатели на функции-члены... так и должно быть?

Добавлено через 17 минут
+ ещё так: http://ideone.com/PHcaHO
В общем что-то я уже запутался
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.08.2013, 01:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Функции-члены с "ref-qualifier" (C++):

Необработанное исключение в "0x77913ab3" в "x": 0xC0000005: Нарушение прав доступа при чтении "0xdddddddd" - C++
вот код, нужно найти 3 минимальных положительных числа в массиве. При размере массива больше 950 в конце заполнения рандомным способом...

Найти в строке последовательность символов ("abcd") и заменить ее другой ("xyz") - C++
Найти в строке последовательность символов (&quot;abcd&quot;) и заменить ее другой (&quot;xyz&quot;).

"std::domain_error" в bool-функции - C++
Есть одна функция, которая сохраняет данные json в файл. Когда доходит дело до return, то срабатывает исключение &quot;std::domain_error&quot;. ...

"С" стиль именование статической функции - C++
Реально ли создать dll c++ со статической функцией класса и именованием в стиле &quot;С&quot;. extern &quot;C&quot; { namespace MathLib { ...

О "нестабильности" или "переполнении" цикла foreach - C++
Здравствуйте, коллеги. Недавно коллега-программист сообщил мне страшную вещь: оказывается, что цикл foreach может переполниться при...

Ошибка: invalid conversion from "int" to "SDL_RendererFlip" - C++
Скриншот приложен, Вот страница, откуда я брал этот код Подскажите что делать

2
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
26.08.2013, 02:54 #2
mingw 4.8.1

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
template<typename>
    struct __is_member_function_pointer_helper
    : public false_type { };
 
  template<typename _Tp, typename _Cp>
    struct __is_member_function_pointer_helper<_Tp _Cp::*>
    : public integral_constant<bool, is_function<_Tp>::value> { };
 
  /// is_member_function_pointer
  template<typename _Tp>
    struct is_member_function_pointer
    : public integral_constant<bool, (__is_member_function_pointer_helper<
                      typename remove_cv<_Tp>::type>::value)>
    { };
is_member_function_pointer тянет is_function, лезем туда
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/// is_function
  template<typename>
    struct is_function
    : public false_type { };
 
  template<typename _Res, typename... _ArgTypes>
    struct is_function<_Res(_ArgTypes...)>
    : public true_type { };
 
  template<typename _Res, typename... _ArgTypes>
    struct is_function<_Res(_ArgTypes......)>
    : public true_type { };
 
  template<typename _Res, typename... _ArgTypes>
    struct is_function<_Res(_ArgTypes...) const>
    : public true_type { };
 
  template<typename _Res, typename... _ArgTypes>
    struct is_function<_Res(_ArgTypes......) const>
    : public true_type { };
 
  template<typename _Res, typename... _ArgTypes>
    struct is_function<_Res(_ArgTypes...) volatile>
    : public true_type { };
 
  template<typename _Res, typename... _ArgTypes>
    struct is_function<_Res(_ArgTypes......) volatile>
    : public true_type { };
 
  template<typename _Res, typename... _ArgTypes>
    struct is_function<_Res(_ArgTypes...) const volatile>
    : public true_type { };
 
  template<typename _Res, typename... _ArgTypes>
    struct is_function<_Res(_ArgTypes......) const volatile>
    : public true_type { };

специализаций для rvalue/lvalue for this нет, похоже что баг, в стандарт сейчасть лезть влом

Добавлено через 1 минуту

Не по теме:

и что за специализации is_function с 6-ю точками?



Добавлено через 3 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <type_traits>
 
struct dummy {
      
      void one() { std::cout << "one\n"; }
 
      void two() & { std::cout << "two\n"; }
 
      void three() && { std::cout << "tree\n"; }
   }; 
 
namespace std {
 
template<typename _Res, typename... _ArgTypes>
    struct is_function<_Res(_ArgTypes...)&&>
    : public true_type { };
}
 
int main() {
   std::cout << std::boolalpha
             << std::is_member_function_pointer<decltype(&dummy::three)>::value 
             << std::endl;
}
http://ideone.com/AlZXON
1
gray_fox
What a waste!
1522 / 1227 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
26.08.2013, 03:34  [ТС] #3
Добавлено через 1 минуту
Цитата Сообщение от Jupiter Посмотреть сообщение
похоже что баг
Тогда буду считать что так пока

Добавлено через 6 минут

Не по теме:

Цитата Сообщение от Jupiter Посмотреть сообщение
и что за специализации is_function с 6-ю точками?
это для ф-ии с элипсисом: http://stackoverflow.com/questions/5...aning-of-token мда :/

2
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.08.2013, 03:34
Привет! Вот еще темы с ответами:

CString buff = "aaa" + "bbb" - C++
Хочется одним оператором конкатенировать несколько подстрок CString buff = &quot;aaa&quot; + &quot;bbb&quot; компилятор выдает error C2110: cannot add two...

Qt Creator. Все "за" и "против" - C++
Доброго времени суток, форумчане! Сегодня задался вопросом использования такой IDE, как Qt Creator. Суть темы заключается в том, что я...

Ординарная Сеть Петри для задачи об "обедающих философах" - C++
Помогите с сетью Петри. дуб в этом Задача об обедающих философах. Пять философов отдыхают в пансионате. Каждый из философов может...

Ошибка "неопределенная ссылка" при работе с std::thread - C++
При попытке сделать что-либо с std::thread, выдает ошибку компиляции, &quot;неопределенная ссылка &quot; . К примеру: #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.