re PR c++/24163 (dependent Base class scope examined during unqualified name lookup in template)
PR c++/24163 PR c++/29131 gcc/cp/ * pt.c (tsubst_copy_and_build) [CALL_EXPR]: Avoid repeating unqualified lookup. * semantics.c (perform_koenig_lookup): Add complain parm. * cp-tree.h: Adjust. * parser.c (cp_parser_postfix_expression): Adjust. (cp_parser_perform_range_for_lookup): Adjust. libstdc++-v3/ * include/ext/pb_ds/assoc_container.hpp: Explicitly qualify calls to functions from dependent bases. * include/ext/pb_ds/detail/rb_tree_map_/erase_fn_imps.hpp: Likewise. * include/ext/pb_ds/detail/rb_tree_map_/ split_join_fn_imps.hpp: Likewise. * include/ext/pb_ds/detail/splay_tree_/erase_fn_imps.hpp: Likewise. * include/ext/pb_ds/detail/splay_tree_/insert_fn_imps.hpp: Likewise. * include/ext/pb_ds/detail/splay_tree_/splay_fn_imps.hpp: Likewise. * include/ext/pb_ds/detail/splay_tree_/ split_join_fn_imps.hpp: Likewise. * include/ext/pb_ds/detail/tree_policy/ order_statistics_imp.hpp: Likewise. * include/ext/pb_ds/detail/trie_policy/ prefix_search_node_update_imp.hpp: Likewise. * include/ext/rc_string_base.h: Likewise. * include/ext/rope: Likewise. * include/ext/ropeimpl.h: Likewise. * testsuite/util/exception/safety.h: Likewise. * testsuite/util/native_type/native_priority_queue.hpp: Likewise. * testsuite/util/testsuite_io.h: Likewise. * include/std/functional: Declare mem_fn earlier. * include/tr1/functional: Likewise. * include/tr1/exp_integral.tcc: Declare __expint_E1 earlier. From-SVN: r173965
This commit is contained in:
parent
6e04dcd56f
commit
94df301fa0
|
@ -1,3 +1,14 @@
|
|||
2011-05-20 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/24163
|
||||
PR c++/29131
|
||||
* pt.c (tsubst_copy_and_build) [CALL_EXPR]: Avoid repeating
|
||||
unqualified lookup.
|
||||
* semantics.c (perform_koenig_lookup): Add complain parm.
|
||||
* cp-tree.h: Adjust.
|
||||
* parser.c (cp_parser_postfix_expression): Adjust.
|
||||
(cp_parser_perform_range_for_lookup): Adjust.
|
||||
|
||||
2011-05-20 Jason Merrill <jason@redhat.com>
|
||||
|
||||
* semantics.c (finish_call_expr): SET_EXPR_LOCATION.
|
||||
|
|
|
@ -5365,7 +5365,8 @@ extern tree finish_stmt_expr_expr (tree, tree);
|
|||
extern tree finish_stmt_expr (tree, bool);
|
||||
extern tree stmt_expr_value_expr (tree);
|
||||
bool empty_expr_stmt_p (tree);
|
||||
extern tree perform_koenig_lookup (tree, VEC(tree,gc) *, bool);
|
||||
extern tree perform_koenig_lookup (tree, VEC(tree,gc) *, bool,
|
||||
tsubst_flags_t);
|
||||
extern tree finish_call_expr (tree, VEC(tree,gc) **, bool,
|
||||
bool, tsubst_flags_t);
|
||||
extern tree finish_increment_expr (tree, enum tree_code);
|
||||
|
|
|
@ -5019,7 +5019,8 @@ cp_parser_postfix_expression (cp_parser *parser, bool address_p, bool cast_p,
|
|||
if (!any_type_dependent_arguments_p (args))
|
||||
postfix_expression
|
||||
= perform_koenig_lookup (postfix_expression, args,
|
||||
/*include_std=*/false);
|
||||
/*include_std=*/false,
|
||||
tf_warning_or_error);
|
||||
}
|
||||
else
|
||||
postfix_expression
|
||||
|
@ -5044,7 +5045,8 @@ cp_parser_postfix_expression (cp_parser *parser, bool address_p, bool cast_p,
|
|||
if (!any_type_dependent_arguments_p (args))
|
||||
postfix_expression
|
||||
= perform_koenig_lookup (postfix_expression, args,
|
||||
/*include_std=*/false);
|
||||
/*include_std=*/false,
|
||||
tf_warning_or_error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -8741,11 +8743,13 @@ cp_parser_perform_range_for_lookup (tree range, tree *begin, tree *end)
|
|||
VEC_safe_push (tree, gc, vec, range);
|
||||
|
||||
member_begin = perform_koenig_lookup (id_begin, vec,
|
||||
/*include_std=*/true);
|
||||
/*include_std=*/true,
|
||||
tf_warning_or_error);
|
||||
*begin = finish_call_expr (member_begin, &vec, false, true,
|
||||
tf_warning_or_error);
|
||||
member_end = perform_koenig_lookup (id_end, vec,
|
||||
/*include_std=*/true);
|
||||
/*include_std=*/true,
|
||||
tf_warning_or_error);
|
||||
*end = finish_call_expr (member_end, &vec, false, true,
|
||||
tf_warning_or_error);
|
||||
|
||||
|
|
69
gcc/cp/pt.c
69
gcc/cp/pt.c
|
@ -12894,6 +12894,20 @@ tsubst_copy_and_build (tree t,
|
|||
/*done=*/false,
|
||||
/*address_p=*/false);
|
||||
}
|
||||
else if (koenig_p && TREE_CODE (function) == IDENTIFIER_NODE)
|
||||
{
|
||||
/* Do nothing; calling tsubst_copy_and_build on an identifier
|
||||
would incorrectly perform unqualified lookup again.
|
||||
|
||||
Note that we can also have an IDENTIFIER_NODE if the earlier
|
||||
unqualified lookup found a member function; in that case
|
||||
koenig_p will be false and we do want to do the lookup
|
||||
again to find the instantiated member function.
|
||||
|
||||
FIXME but doing that causes c++/15272, so we need to stop
|
||||
using IDENTIFIER_NODE in that situation. */
|
||||
qualified_p = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (TREE_CODE (function) == COMPONENT_REF)
|
||||
|
@ -12965,14 +12979,59 @@ tsubst_copy_and_build (tree t,
|
|||
into a non-dependent call. */
|
||||
&& type_dependent_expression_p_push (t)
|
||||
&& !any_type_dependent_arguments_p (call_args))
|
||||
function = perform_koenig_lookup (function, call_args, false);
|
||||
function = perform_koenig_lookup (function, call_args, false,
|
||||
tf_none);
|
||||
|
||||
if (TREE_CODE (function) == IDENTIFIER_NODE
|
||||
&& !processing_template_decl)
|
||||
&& !any_type_dependent_arguments_p (call_args))
|
||||
{
|
||||
unqualified_name_lookup_error (function);
|
||||
release_tree_vector (call_args);
|
||||
return error_mark_node;
|
||||
if (koenig_p && (complain & tf_warning_or_error))
|
||||
{
|
||||
/* For backwards compatibility and good diagnostics, try
|
||||
the unqualified lookup again if we aren't in SFINAE
|
||||
context. */
|
||||
tree unq = (tsubst_copy_and_build
|
||||
(function, args, complain, in_decl, true,
|
||||
integral_constant_expression_p));
|
||||
if (unq != function)
|
||||
{
|
||||
tree fn = unq;
|
||||
if (TREE_CODE (fn) == COMPONENT_REF)
|
||||
fn = TREE_OPERAND (fn, 1);
|
||||
if (is_overloaded_fn (fn))
|
||||
fn = get_first_fn (fn);
|
||||
permerror (EXPR_LOC_OR_HERE (t),
|
||||
"%qD was not declared in this scope, "
|
||||
"and no declarations were found by "
|
||||
"argument-dependent lookup at the point "
|
||||
"of instantiation", function);
|
||||
if (DECL_CLASS_SCOPE_P (fn))
|
||||
{
|
||||
inform (EXPR_LOC_OR_HERE (t),
|
||||
"declarations in dependent base %qT are "
|
||||
"not found by unqualified lookup",
|
||||
DECL_CLASS_CONTEXT (fn));
|
||||
if (current_class_ptr)
|
||||
inform (EXPR_LOC_OR_HERE (t),
|
||||
"use %<this->%D%> instead", function);
|
||||
else
|
||||
inform (EXPR_LOC_OR_HERE (t),
|
||||
"use %<%T::%D%> instead",
|
||||
TYPE_IDENTIFIER (current_class_type),
|
||||
function);
|
||||
}
|
||||
else
|
||||
inform (0, "%q+D declared here, later in the "
|
||||
"translation unit", fn);
|
||||
function = unq;
|
||||
}
|
||||
}
|
||||
if (TREE_CODE (function) == IDENTIFIER_NODE)
|
||||
{
|
||||
unqualified_name_lookup_error (function);
|
||||
release_tree_vector (call_args);
|
||||
return error_mark_node;
|
||||
}
|
||||
}
|
||||
|
||||
/* Remember that there was a reference to this entity. */
|
||||
|
|
|
@ -1953,7 +1953,8 @@ empty_expr_stmt_p (tree expr_stmt)
|
|||
Returns the functions to be considered by overload resolution. */
|
||||
|
||||
tree
|
||||
perform_koenig_lookup (tree fn, VEC(tree,gc) *args, bool include_std)
|
||||
perform_koenig_lookup (tree fn, VEC(tree,gc) *args, bool include_std,
|
||||
tsubst_flags_t complain)
|
||||
{
|
||||
tree identifier = NULL_TREE;
|
||||
tree functions = NULL_TREE;
|
||||
|
@ -1991,8 +1992,13 @@ perform_koenig_lookup (tree fn, VEC(tree,gc) *args, bool include_std)
|
|||
{
|
||||
fn = lookup_arg_dependent (identifier, functions, args, include_std);
|
||||
if (!fn)
|
||||
/* The unqualified name could not be resolved. */
|
||||
fn = unqualified_fn_lookup_error (identifier);
|
||||
{
|
||||
/* The unqualified name could not be resolved. */
|
||||
if (complain)
|
||||
fn = unqualified_fn_lookup_error (identifier);
|
||||
else
|
||||
fn = identifier;
|
||||
}
|
||||
}
|
||||
|
||||
if (fn && template_id)
|
||||
|
|
|
@ -1,3 +1,14 @@
|
|||
2011-05-20 Jason Merrill <jason@redhat.com>
|
||||
|
||||
* g++.dg/template/koenig9.C: New.
|
||||
* g++.dg/opt/pr47615.C: Fix.
|
||||
* g++.dg/overload/defarg1.C: Fix.
|
||||
* g++.dg/tc1/dr213.C: Remove xfail.
|
||||
* g++.dg/torture/pr34850.C: Fix.
|
||||
* g++.dg/torture/pr39362.C: Fix.
|
||||
* g++.old-deja/g++.brendan/crash56.C: Fix.
|
||||
* g++.old-deja/g++.pt/memtemp47.C: Fix.
|
||||
|
||||
2011-05-20 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/49079
|
||||
|
|
|
@ -360,7 +360,7 @@ template < typename Const_Node_Iterator, typename Node_Iterator, typename, typen
|
|||
{
|
||||
{
|
||||
{
|
||||
rotate_right (p_nd);
|
||||
this->rotate_right (p_nd);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,7 +3,9 @@
|
|||
template<typename T>
|
||||
int foo (T t, int = foo(T()));
|
||||
|
||||
struct A { };
|
||||
|
||||
int main()
|
||||
{
|
||||
foo(0); // { dg-error "default argument" }
|
||||
foo(A()); // { dg-error "default argument" }
|
||||
}
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
template <class T> struct A : T {
|
||||
void h(T t) {
|
||||
f(t);
|
||||
g(t); // { dg-error "" "" { xfail *-*-* } }
|
||||
g(t); // { dg-message "" }
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -21,7 +21,7 @@ void f(B) {}
|
|||
|
||||
int main()
|
||||
{
|
||||
A<B> ab; // { dg-error "" "" { xfail *-*-* } }
|
||||
A<B> ab;
|
||||
B b;
|
||||
ab.h(b);
|
||||
ab.h(b); // { dg-message "instantiated" }
|
||||
}
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
// PR c++/29131
|
||||
// int has no associated namespaces, so arg-dep lookup doesn't find g(int).
|
||||
|
||||
template <class T> int f() { return g(T()); } // { dg-error "argument-dependent" }
|
||||
int g(int); // { dg-message "declared here" }
|
||||
int i = f<int>();
|
||||
|
||||
// PR c++/24163
|
||||
// Unqualified lookup doesn't find names from dependent bases.
|
||||
|
||||
template <class T>
|
||||
struct A
|
||||
{
|
||||
static void h(T);
|
||||
};
|
||||
|
||||
template <class T> struct B: A<T>
|
||||
{
|
||||
void f() { h(T()); } // { dg-error "argument-dependent" }
|
||||
static void g() { h(T()); } // { dg-error "argument-dependent" }
|
||||
};
|
||||
|
||||
int main()
|
||||
{
|
||||
B<int> b;
|
||||
b.f();
|
||||
b.g();
|
||||
}
|
||||
|
||||
// { dg-message "dependent base .A.int" "" { target *-*-* } 19 }
|
||||
// { dg-message "this->h" "" { target *-*-* } 19 }
|
||||
// { dg-message "dependent base .A.int" "" { target *-*-* } 20 }
|
||||
// { dg-message "B::h" "" { target *-*-* } 20 }
|
|
@ -48,7 +48,7 @@ template<typename T> void MemoryRegion<T>::create(u32bit n) {
|
|||
template<typename T> class SecureVector : public MemoryRegion<T> {
|
||||
public:
|
||||
SecureVector<T>& operator=(const MemoryRegion<T>& in) {
|
||||
if(this != &in) set(in);
|
||||
if(this != &in) this->set(in);
|
||||
}
|
||||
};
|
||||
class OctetString {
|
||||
|
|
|
@ -55,7 +55,7 @@ template <typename T, int cap> class I;
|
|||
template <typename T> struct I <T, 0> : H <T>
|
||||
{
|
||||
I (int capacity) { allocateBuffer (capacity); }
|
||||
~I () { deallocateBuffer (buffer ()); }
|
||||
~I () { this->deallocateBuffer (buffer ()); }
|
||||
using H <T>::allocateBuffer;
|
||||
H <T>::buffer;
|
||||
};
|
||||
|
|
|
@ -253,7 +253,7 @@ void
|
|||
SetLD<T>::add(const T& item)
|
||||
{
|
||||
if ( ! contains(item) )
|
||||
append(item);
|
||||
this->append(item);
|
||||
}
|
||||
template<class T>
|
||||
void
|
||||
|
|
|
@ -18,7 +18,7 @@ struct T : public S<X>
|
|||
{
|
||||
template <class U>
|
||||
void f(U u)
|
||||
{ printf ("In T::f(U)\n"); g(u); }
|
||||
{ printf ("In T::f(U)\n"); this->g(u); }
|
||||
};
|
||||
|
||||
int main()
|
||||
|
|
|
@ -1,3 +1,29 @@
|
|||
2011-05-20 Jason Merrill <jason@redhat.com>
|
||||
|
||||
* include/ext/pb_ds/assoc_container.hpp: Explicitly qualify calls to
|
||||
functions from dependent bases.
|
||||
* include/ext/pb_ds/detail/rb_tree_map_/erase_fn_imps.hpp: Likewise.
|
||||
* include/ext/pb_ds/detail/rb_tree_map_/
|
||||
split_join_fn_imps.hpp: Likewise.
|
||||
* include/ext/pb_ds/detail/splay_tree_/erase_fn_imps.hpp: Likewise.
|
||||
* include/ext/pb_ds/detail/splay_tree_/insert_fn_imps.hpp: Likewise.
|
||||
* include/ext/pb_ds/detail/splay_tree_/splay_fn_imps.hpp: Likewise.
|
||||
* include/ext/pb_ds/detail/splay_tree_/
|
||||
split_join_fn_imps.hpp: Likewise.
|
||||
* include/ext/pb_ds/detail/tree_policy/
|
||||
order_statistics_imp.hpp: Likewise.
|
||||
* include/ext/pb_ds/detail/trie_policy/
|
||||
prefix_search_node_update_imp.hpp: Likewise.
|
||||
* include/ext/rc_string_base.h: Likewise.
|
||||
* include/ext/rope: Likewise.
|
||||
* include/ext/ropeimpl.h: Likewise.
|
||||
* testsuite/util/exception/safety.h: Likewise.
|
||||
* testsuite/util/native_type/native_priority_queue.hpp: Likewise.
|
||||
* testsuite/util/testsuite_io.h: Likewise.
|
||||
* include/std/functional: Declare mem_fn earlier.
|
||||
* include/tr1/functional: Likewise.
|
||||
* include/tr1/exp_integral.tcc: Declare __expint_E1 earlier.
|
||||
|
||||
2011-05-19 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
* include/std/tuple (tuple_element<__i, const _Tp>,
|
||||
|
|
|
@ -234,7 +234,7 @@ namespace __gnu_pbds
|
|||
template<typename It>
|
||||
cc_hash_table(It first, It last, const hash_fn& h)
|
||||
: base_type(h)
|
||||
{ copy_from_range(first, last); }
|
||||
{ this->copy_from_range(first, last); }
|
||||
|
||||
// Constructor taking __iterators to a range of value_types and
|
||||
// some policy objects The value_types between first_it and
|
||||
|
@ -245,7 +245,7 @@ namespace __gnu_pbds
|
|||
template<typename It>
|
||||
cc_hash_table(It first, It last, const hash_fn& h, const eq_fn& e)
|
||||
: base_type(h, e)
|
||||
{ copy_from_range(first, last); }
|
||||
{ this->copy_from_range(first, last); }
|
||||
|
||||
// Constructor taking __iterators to a range of value_types and
|
||||
// some policy objects The value_types between first_it and
|
||||
|
@ -258,7 +258,7 @@ namespace __gnu_pbds
|
|||
cc_hash_table(It first, It last, const hash_fn& h, const eq_fn& e,
|
||||
const comb_hash_fn& ch)
|
||||
: base_type(h, e, ch)
|
||||
{ copy_from_range(first, last); }
|
||||
{ this->copy_from_range(first, last); }
|
||||
|
||||
// Constructor taking __iterators to a range of value_types and
|
||||
// some policy objects The value_types between first_it and
|
||||
|
@ -272,7 +272,7 @@ namespace __gnu_pbds
|
|||
cc_hash_table(It first, It last, const hash_fn& h, const eq_fn& e,
|
||||
const comb_hash_fn& ch, const resize_policy& rp)
|
||||
: base_type(h, e, ch, rp)
|
||||
{ copy_from_range(first, last); }
|
||||
{ this->copy_from_range(first, last); }
|
||||
|
||||
cc_hash_table(const cc_hash_table& other)
|
||||
: base_type((const base_type&)other)
|
||||
|
|
|
@ -43,7 +43,7 @@ inline bool
|
|||
PB_DS_CLASS_C_DEC::
|
||||
erase(const_key_reference r_key)
|
||||
{
|
||||
point_iterator it = find(r_key);
|
||||
point_iterator it = this->find(r_key);
|
||||
if (it == base_type::end())
|
||||
return false;
|
||||
erase(it);
|
||||
|
@ -121,7 +121,7 @@ void
|
|||
PB_DS_CLASS_C_DEC::
|
||||
remove_node(node_pointer p_z)
|
||||
{
|
||||
update_min_max_for_erased_node(p_z);
|
||||
this->update_min_max_for_erased_node(p_z);
|
||||
node_pointer p_y = p_z;
|
||||
node_pointer p_x = 0;
|
||||
node_pointer p_new_x_parent = 0;
|
||||
|
@ -185,7 +185,7 @@ remove_node(node_pointer p_z)
|
|||
p_y = p_z;
|
||||
}
|
||||
|
||||
update_to_top(p_new_x_parent, (node_update* )this);
|
||||
this->update_to_top(p_new_x_parent, (node_update* )this);
|
||||
|
||||
if (p_y->m_red)
|
||||
return;
|
||||
|
@ -238,7 +238,7 @@ remove_fixup(node_pointer p_x, node_pointer p_new_x_parent)
|
|||
p_w->m_p_right->m_red = false;
|
||||
|
||||
base_type::rotate_left(p_new_x_parent);
|
||||
update_to_top(p_new_x_parent, (node_update* )this);
|
||||
this->update_to_top(p_new_x_parent, (node_update* )this);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -279,7 +279,7 @@ remove_fixup(node_pointer p_x, node_pointer p_new_x_parent)
|
|||
p_w->m_p_left->m_red = false;
|
||||
|
||||
base_type::rotate_right(p_new_x_parent);
|
||||
update_to_top(p_new_x_parent, (node_update* )this);
|
||||
this->update_to_top(p_new_x_parent, (node_update* )this);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -246,7 +246,7 @@ split(const_key_reference r_key, PB_DS_CLASS_C_DEC& other)
|
|||
|
||||
PB_DS_STRUCT_ONLY_ASSERT_VALID((*this))
|
||||
PB_DS_STRUCT_ONLY_ASSERT_VALID(other)
|
||||
node_pointer p_nd = upper_bound(r_key).m_p_nd;
|
||||
node_pointer p_nd = this->upper_bound(r_key).m_p_nd;
|
||||
do
|
||||
{
|
||||
node_pointer p_next_nd = p_nd->m_p_parent;
|
||||
|
@ -292,7 +292,7 @@ split_at_node(node_pointer p_nd, PB_DS_CLASS_C_DEC& other)
|
|||
if (p_l != 0)
|
||||
p_l->m_p_parent = p_parent;
|
||||
|
||||
update_to_top(p_parent, (node_update* )this);
|
||||
this->update_to_top(p_parent, (node_update* )this);
|
||||
|
||||
if (!p_nd->m_red)
|
||||
remove_fixup(p_l, p_parent);
|
||||
|
|
|
@ -142,7 +142,7 @@ erase_node(node_pointer p_nd)
|
|||
if (p_l != 0)
|
||||
p_l->m_p_parent = p_target_r;
|
||||
PB_DS_ASSERT_VALID((*this))
|
||||
apply_update(p_target_r, (node_update* )this);
|
||||
this->apply_update(p_target_r, (node_update* )this);
|
||||
}
|
||||
|
||||
PB_DS_CLASS_T_DEC
|
||||
|
|
|
@ -90,5 +90,5 @@ insert_leaf_imp(const_reference r_value)
|
|||
while (p_nd->m_p_right != 0)
|
||||
p_nd = p_nd->m_p_right;
|
||||
|
||||
return std::make_pair(insert_leaf_new(r_value, p_nd, false), true);
|
||||
return std::make_pair(this->insert_leaf_new(r_value, p_nd, false), true);
|
||||
}
|
||||
|
|
|
@ -274,9 +274,9 @@ splay_zz_end(node_pointer p_nd, node_pointer p_parent,
|
|||
if (p_nd->m_p_parent == base_type::m_p_head)
|
||||
base_type::m_p_head->m_p_parent = p_nd;
|
||||
|
||||
apply_update(p_grandparent, (node_update* )this);
|
||||
apply_update(p_parent, (node_update* )this);
|
||||
apply_update(p_nd, (node_update* )this);
|
||||
this->apply_update(p_grandparent, (node_update* )this);
|
||||
this->apply_update(p_parent, (node_update* )this);
|
||||
this->apply_update(p_nd, (node_update* )this);
|
||||
|
||||
PB_DS_ASSERT_BASE_NODE_CONSISTENT(p_nd)
|
||||
}
|
||||
|
|
|
@ -66,7 +66,7 @@ join(PB_DS_CLASS_C_DEC& other)
|
|||
|
||||
base_type::m_p_head->m_p_parent = p_target_r;
|
||||
p_target_r->m_p_parent = base_type::m_p_head;
|
||||
apply_update(p_target_r, (node_update* )this);
|
||||
this->apply_update(p_target_r, (node_update* )this);
|
||||
|
||||
base_type::join_finish(other);
|
||||
|
||||
|
@ -89,7 +89,7 @@ split(const_key_reference r_key, PB_DS_CLASS_C_DEC& other)
|
|||
return;
|
||||
}
|
||||
|
||||
node_pointer p_upper_bound = upper_bound(r_key).m_p_nd;
|
||||
node_pointer p_upper_bound = this->upper_bound(r_key).m_p_nd;
|
||||
_GLIBCXX_DEBUG_ASSERT(p_upper_bound != 0);
|
||||
|
||||
splay(p_upper_bound);
|
||||
|
@ -103,7 +103,7 @@ split(const_key_reference r_key, PB_DS_CLASS_C_DEC& other)
|
|||
other.m_p_head->m_p_parent = p_upper_bound;
|
||||
p_upper_bound->m_p_parent = other.m_p_head;
|
||||
p_upper_bound->m_p_left = 0;
|
||||
apply_update(p_upper_bound, (node_update* )this);
|
||||
this->apply_update(p_upper_bound, (node_update* )this);
|
||||
base_type::split_finish(other);
|
||||
|
||||
PB_DS_ASSERT_VALID((*this))
|
||||
|
|
|
@ -96,9 +96,9 @@ order_of_key(const_key_reference r_key) const
|
|||
{
|
||||
const_node_iterator l_it = it.get_l_child();
|
||||
|
||||
if (r_cmp_fn(r_key, extract_key(*(*it))))
|
||||
if (r_cmp_fn(r_key, this->extract_key(*(*it))))
|
||||
it = l_it;
|
||||
else if (r_cmp_fn(extract_key(*(*it)), r_key))
|
||||
else if (r_cmp_fn(this->extract_key(*(*it)), r_key))
|
||||
{
|
||||
|
||||
ord += (l_it == end_it)?
|
||||
|
|
|
@ -104,9 +104,9 @@ prefix_range(typename e_access_traits::const_iterator b, typename e_access_trait
|
|||
|
||||
if (common_range_length >= given_range_length)
|
||||
{
|
||||
iterator ret_b = leftmost_it(nd_it);
|
||||
iterator ret_b = this->leftmost_it(nd_it);
|
||||
|
||||
iterator ret_e = rightmost_it(nd_it);
|
||||
iterator ret_e = this->rightmost_it(nd_it);
|
||||
|
||||
return (std::make_pair(ret_b, ++ret_e));
|
||||
}
|
||||
|
|
|
@ -461,7 +461,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
|||
__alloc);
|
||||
|
||||
if (_M_info._M_length)
|
||||
_S_copy(__r->_M_refdata(), _M_refdata(), _M_info._M_length);
|
||||
__rc_string_base::_S_copy(__r->_M_refdata(), _M_refdata(), _M_info._M_length);
|
||||
|
||||
__r->_M_set_length(_M_info._M_length);
|
||||
return __r->_M_refdata();
|
||||
|
@ -569,7 +569,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
|||
// Check for out_of_range and length_error exceptions.
|
||||
_Rep* __r = _Rep::_S_create(__dnew, size_type(0), __a);
|
||||
__try
|
||||
{ _S_copy_chars(__r->_M_refdata(), __beg, __end); }
|
||||
{ __rc_string_base::_S_copy_chars(__r->_M_refdata(), __beg, __end); }
|
||||
__catch(...)
|
||||
{
|
||||
__r->_M_destroy(__a);
|
||||
|
@ -590,7 +590,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
|||
// Check for out_of_range and length_error exceptions.
|
||||
_Rep* __r = _Rep::_S_create(__n, size_type(0), __a);
|
||||
if (__n)
|
||||
_S_assign(__r->_M_refdata(), __n, __c);
|
||||
__rc_string_base::_S_assign(__r->_M_refdata(), __n, __c);
|
||||
|
||||
__r->_M_set_length(__n);
|
||||
return __r->_M_refdata();
|
||||
|
@ -659,11 +659,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
|||
_M_capacity(), _M_get_allocator());
|
||||
|
||||
if (__pos)
|
||||
_S_copy(__r->_M_refdata(), _M_data(), __pos);
|
||||
this->_S_copy(__r->_M_refdata(), _M_data(), __pos);
|
||||
if (__s && __len2)
|
||||
_S_copy(__r->_M_refdata() + __pos, __s, __len2);
|
||||
this->_S_copy(__r->_M_refdata() + __pos, __s, __len2);
|
||||
if (__how_much)
|
||||
_S_copy(__r->_M_refdata() + __pos + __len2,
|
||||
this->_S_copy(__r->_M_refdata() + __pos + __len2,
|
||||
_M_data() + __pos + __len1, __how_much);
|
||||
|
||||
_M_dispose();
|
||||
|
@ -685,9 +685,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
|||
_M_get_allocator());
|
||||
|
||||
if (__pos)
|
||||
_S_copy(__r->_M_refdata(), _M_data(), __pos);
|
||||
this->_S_copy(__r->_M_refdata(), _M_data(), __pos);
|
||||
if (__how_much)
|
||||
_S_copy(__r->_M_refdata() + __pos,
|
||||
this->_S_copy(__r->_M_refdata() + __pos,
|
||||
_M_data() + __pos + __n, __how_much);
|
||||
|
||||
_M_dispose();
|
||||
|
@ -696,7 +696,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
|||
else if (__how_much && __n)
|
||||
{
|
||||
// Work in-place.
|
||||
_S_move(_M_data() + __pos,
|
||||
this->_S_move(_M_data() + __pos,
|
||||
_M_data() + __pos + __n, __how_much);
|
||||
}
|
||||
|
||||
|
|
|
@ -729,7 +729,7 @@ protected:
|
|||
if (_M_data != this->_M_c_string)
|
||||
this->_M_free_c_string();
|
||||
|
||||
__STL_FREE_STRING(_M_data, this->_M_size, this->_M_get_allocator());
|
||||
this->__STL_FREE_STRING(_M_data, this->_M_size, this->_M_get_allocator());
|
||||
}
|
||||
#endif
|
||||
protected:
|
||||
|
@ -1170,7 +1170,7 @@ protected:
|
|||
operator*()
|
||||
{
|
||||
if (0 == this->_M_buf_ptr)
|
||||
_S_setcache(*this);
|
||||
this->_S_setcache(*this);
|
||||
return *this->_M_buf_ptr;
|
||||
}
|
||||
|
||||
|
@ -1299,7 +1299,7 @@ protected:
|
|||
_M_root_rope(__r)
|
||||
{ _RopeRep::_S_ref(this->_M_root);
|
||||
if (!(__r -> empty()))
|
||||
_S_setcache(*this);
|
||||
this->_S_setcache(*this);
|
||||
}
|
||||
|
||||
void _M_check();
|
||||
|
|
|
@ -380,7 +380,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
|||
_Rope_RopeLeaf<_CharT, _Alloc>* __l
|
||||
= (_Rope_RopeLeaf<_CharT, _Alloc>*)this;
|
||||
__l->_Rope_RopeLeaf<_CharT, _Alloc>::~_Rope_RopeLeaf();
|
||||
_L_deallocate(__l, 1);
|
||||
this->_L_deallocate(__l, 1);
|
||||
break;
|
||||
}
|
||||
case __detail::_S_concat:
|
||||
|
@ -389,7 +389,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
|||
= (_Rope_RopeConcatenation<_CharT, _Alloc>*)this;
|
||||
__c->_Rope_RopeConcatenation<_CharT, _Alloc>::
|
||||
~_Rope_RopeConcatenation();
|
||||
_C_deallocate(__c, 1);
|
||||
this->_C_deallocate(__c, 1);
|
||||
break;
|
||||
}
|
||||
case __detail::_S_function:
|
||||
|
@ -397,7 +397,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
|||
_Rope_RopeFunction<_CharT, _Alloc>* __f
|
||||
= (_Rope_RopeFunction<_CharT, _Alloc>*)this;
|
||||
__f->_Rope_RopeFunction<_CharT, _Alloc>::~_Rope_RopeFunction();
|
||||
_F_deallocate(__f, 1);
|
||||
this->_F_deallocate(__f, 1);
|
||||
break;
|
||||
}
|
||||
case __detail::_S_substringfn:
|
||||
|
@ -406,7 +406,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
|||
(_Rope_RopeSubstring<_CharT, _Alloc>*)this;
|
||||
__ss->_Rope_RopeSubstring<_CharT, _Alloc>::
|
||||
~_Rope_RopeSubstring();
|
||||
_S_deallocate(__ss, 1);
|
||||
this->_S_deallocate(__ss, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -430,7 +430,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
|||
{
|
||||
size_t __old_len = __r->_M_size;
|
||||
_CharT* __new_data = (_CharT*)
|
||||
_Data_allocate(_S_rounded_up_size(__old_len + __len));
|
||||
rope::_Data_allocate(_S_rounded_up_size(__old_len + __len));
|
||||
_RopeLeaf* __result;
|
||||
|
||||
uninitialized_copy_n(__r->_M_data, __old_len, __new_data);
|
||||
|
@ -511,7 +511,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
|||
}
|
||||
__catch(...)
|
||||
{
|
||||
_C_deallocate(__result,1);
|
||||
rope::_C_deallocate(__result,1);
|
||||
__throw_exception_again;
|
||||
}
|
||||
// In case of exception, we need to deallocate
|
||||
|
@ -814,7 +814,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
|||
if (__result_len > __lazy_threshold)
|
||||
goto lazy;
|
||||
__section = (_CharT*)
|
||||
_Data_allocate(_S_rounded_up_size(__result_len));
|
||||
rope::_Data_allocate(_S_rounded_up_size(__result_len));
|
||||
__try
|
||||
{ (*(__f->_M_fn))(__start, __result_len, __section); }
|
||||
__catch(...)
|
||||
|
|
|
@ -62,6 +62,12 @@ namespace std _GLIBCXX_VISIBILITY(default)
|
|||
{
|
||||
_GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
|
||||
template<typename _MemberPointer>
|
||||
class _Mem_fn;
|
||||
template<typename _Tp, typename _Class>
|
||||
_Mem_fn<_Tp _Class::*>
|
||||
mem_fn(_Tp _Class::*);
|
||||
|
||||
_GLIBCXX_HAS_NESTED_TYPE(result_type)
|
||||
|
||||
/// If we have found a result_type, extract it.
|
||||
|
@ -496,9 +502,6 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
|
|||
|
||||
// @} group functors
|
||||
|
||||
template<typename _MemberPointer>
|
||||
class _Mem_fn;
|
||||
|
||||
/**
|
||||
* Derives from @c unary_function or @c binary_function, or perhaps
|
||||
* nothing, depending on the number of arguments provided. The
|
||||
|
|
|
@ -59,6 +59,8 @@ namespace tr1
|
|||
{
|
||||
_GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
|
||||
template<typename _Tp> _Tp __expint_E1(const _Tp);
|
||||
|
||||
/**
|
||||
* @brief Return the exponential integral @f$ E_1(x) @f$
|
||||
* by series summation. This should be good
|
||||
|
|
|
@ -52,6 +52,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
|||
|
||||
template<typename _MemberPointer>
|
||||
class _Mem_fn;
|
||||
template<typename _Tp, typename _Class>
|
||||
_Mem_fn<_Tp _Class::*>
|
||||
mem_fn(_Tp _Class::*);
|
||||
|
||||
/**
|
||||
* Actual implementation of _Has_result_type, which uses SFINAE to
|
||||
|
|
|
@ -1196,20 +1196,20 @@ namespace __gnu_test
|
|||
// constructor or assignment operator of value_type throws.
|
||||
if (!traits<container_type>::has_throwing_erase::value)
|
||||
{
|
||||
_M_erasep(_M_container);
|
||||
_M_eraser(_M_container);
|
||||
this->_M_erasep(_M_container);
|
||||
this->_M_eraser(_M_container);
|
||||
}
|
||||
|
||||
_M_popf(_M_container);
|
||||
_M_popb(_M_container);
|
||||
this->_M_popf(_M_container);
|
||||
this->_M_popb(_M_container);
|
||||
|
||||
_M_iops(_M_container);
|
||||
_M_ciops(_M_container);
|
||||
this->_M_iops(_M_container);
|
||||
this->_M_ciops(_M_container);
|
||||
|
||||
_M_swap(_M_container);
|
||||
this->_M_swap(_M_container);
|
||||
|
||||
// Last.
|
||||
_M_clear(_M_container);
|
||||
this->_M_clear(_M_container);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -188,7 +188,7 @@ namespace __gnu_pbds
|
|||
modify(const_reference r_old, const_reference r_new)
|
||||
{
|
||||
erase(r_old);
|
||||
push(r_new);
|
||||
this->push(r_new);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -144,7 +144,7 @@ namespace __gnu_test
|
|||
{
|
||||
p[0] = char_type('s');
|
||||
p[1] = char_type();
|
||||
setg(p, p, p + 1);
|
||||
this->setg(p, p, p + 1);
|
||||
}
|
||||
|
||||
virtual int_type underflow()
|
||||
|
|
Loading…
Reference in New Issue