
Replace `&__rhs` with `_VSTD::addressof(__rhs)` to guard against ADL hijacking of `operator&` in `operator=`. Thanks to @CaseyCarter for bringing it to our attention. Similar issues with hijacking `operator&` still exist, they will be addressed separately. Reviewed By: #libc, Quuxplusone, ldionne Differential Revision: https://reviews.llvm.org/D110852
27 lines
738 B
C++
27 lines
738 B
C++
//===----------------------------------------------------------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
// <valarray>
|
|
|
|
// template<class T> class valarray;
|
|
|
|
// valarray& operator=(const value_type& x);
|
|
|
|
// Validate whether the container can be copy-assigned with an ADL-hijacking operator&
|
|
|
|
#include <valarray>
|
|
|
|
#include "test_macros.h"
|
|
#include "operator_hijacker.h"
|
|
|
|
void test() {
|
|
std::valarray<operator_hijacker> vo;
|
|
std::valarray<operator_hijacker> v;
|
|
v = vo;
|
|
}
|