Разве указатель не является ссылкой, когда
Вы не отменяете это?
Нет, указатель содержит значение, которое интерпретируется как адрес памяти. (Содержит ли оно значение, которое на самом деле является действительным адресом памяти, это другой вопрос)
Ссылка - это псевдоним, еще один способ ссылки на существующее значение.
int i = 5;
int* p = &i; // The value in p is the address that i is stored at.
int& r = i; // The value in r is 5, because r is an alias of i.
// Whenever you use r, it's as if you typed i, and vice versa.
// (In this scope, anyway).
int sum = i + r; // Identical to i + i or r + i or r + r.
Edit:
, поскольку list1 является указателем, как мне получить доступ к ссылке ...?
У вас есть два варианта. Вы можете разыменовать указатель, чтобы попасть в список, на который он указывает:
std::list<int>* list1 = user_defined_func();
std::list<int>& list1ref = *list1;
BOOST_CHECK_PREDICATE( validate_list, list1ref );
delete list1;
Конечно, это можно сократить до:
std::list<int>* list1 = user_defined_func();
BOOST_CHECK_PREDICATE( validate_list, *list1 );
delete list1;
Ваша функция проверки может взять указатель вместо ссылки (не забудьте изменить L1. {Что-то} на L1 -> {что-то}):
bool validate_list(std::list<int>* L1) { ... }