Issue Details (XML | Word | Printable)

Key: STDCXX-512
Type: Bug Bug
Status: Open Open
Priority: Minor Minor
Assignee: Unassigned
Reporter: Martin Sebor
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
C++ Standard Library

std::valarray computed assignment operators don't compile with a user-defined class

Created: 08/Aug/07 09:17 PM   Updated: 13/Sep/09 12:01 AM
Return to search
Component/s: 26. Numerics
Affects Version/s: 4.1.2, 4.1.3, 4.1.4
Fix Version/s: 4.2.2

Time Tracking:
Original Estimate: 4h
Original Estimate - 4h
Remaining Estimate: 4h
Remaining Estimate - 4h
Time Spent: Not Specified
Remaining Estimate - 4h

Issue Links:
Duplicate
 

Severity: Compiler Error


 Description  « Hide
The program below fails to compile because the valarray computed assignment operators make use of operator@ (T, T) instead of the corresponding computed assignment operators defined by T (i.e., T::operator@(T)).

$ cat u.cpp && make u
#include <valarray>

struct Value {
Value& operator*= (const Value&) { return *this; }
Value& operator/= (const Value&) { return *this; }
Value& operator+= (const Value&) { return *this; }
Value& operator-= (const Value&) { return *this; }
Value& operator%= (const Value&) { return *this; }
Value& operator^= (const Value&) { return *this; }
Value& operator&= (const Value&) { return *this; }
Value& operator|= (const Value&) { return *this; }
Value& operator<<= (const Value&) { return *this; }
Value& operator>>= (const Value&) { return *this; }
};

int main ()
{
std::valarray<Value> val;

val *= val;
val /= val;
val += val;
val -= val;
val %= val;
val ^= val;
val &= val;
val |= val;
val <<= val;
val >>= val;
}
gcc -c -I/amd/devco/sebor/stdcxx-4.1.3/include/ansi -D_RWSTDDEBUG -pthread -D_RWSTD_USE_CONFIG -I/build/sebor/stdcxx-4.1.3-gcc-3.4.3_6-15D/include -I/amd/devco/sebor/stdcxx-4.1.3/include -I/amd/devco/sebor/stdcxx-4.1.3/examples/include -pedantic -nostdinc++ -g -m64 -Wall -W -Wcast-qual -Winline -Wshadow -Wwrite-strings -Wno-long-long -Wcast-align u.cpp
/amd/devco/sebor/stdcxx-4.1.3/include/functional: In member function `typename std::binary_function<_TypeT, _TypeT, _TypeT>::result_type std::multiplies<_TypeT>::operator()(const typename std::binary_function<_TypeT, _TypeT, _TypeT>::first_argument_type&, const typename std::binary_function<_TypeT, _TypeT, _TypeT>::second_argument_type&) const [with _TypeT = Value]':
/amd/devco/sebor/stdcxx-4.1.3/include/algorithm:353: instantiated from `_OutputIter std::transform(_InputIter1, _InputIter1, _InputIter2, _OutputIter, _BinaryOperation) [with _InputIter1 = Value*, _InputIter2 = const Value*, _OutputIter = Value*, _BinaryOperation = std::multiplies<Value>]'
/amd/devco/sebor/stdcxx-4.1.3/include/valarray:363: instantiated from `std::valarray<_TypeT>& std::valarray<_TypeT>::operator*=(const std::valarray<_TypeT>&) [with _TypeT = Value]'
u.cpp:20: instantiated from here
/amd/devco/sebor/stdcxx-4.1.3/include/functional:83: error: no match for 'operator*' in '__x * __y'
/amd/devco/sebor/stdcxx-4.1.3/include/functional: In member function `typename std::binary_function<_TypeT, _TypeT, _TypeT>::result_type std::divides<_TypeT>::operator()(const typename std::binary_function<_TypeT, _TypeT, _TypeT>::first_argument_type&, const typename std::binary_function<_TypeT, _TypeT, _TypeT>::second_argument_type&) const [with _TypeT = Value]':
/amd/devco/sebor/stdcxx-4.1.3/include/algorithm:353: instantiated from `_OutputIter std::transform(_InputIter1, _InputIter1, _InputIter2, _OutputIter, _BinaryOperation) [with _InputIter1 = Value*, _InputIter2 = const Value*, _OutputIter = Value*, _BinaryOperation = std::divides<Value>]'
/amd/devco/sebor/stdcxx-4.1.3/include/valarray:376: instantiated from `std::valarray<_TypeT>& std::valarray<_TypeT>::operator/=(const std::valarray<_TypeT>&) [with _TypeT = Value]'
u.cpp:21: instantiated from here
/amd/devco/sebor/stdcxx-4.1.3/include/functional:96: error: no match for 'operator/' in '__x / __y'
/amd/devco/sebor/stdcxx-4.1.3/include/functional: In member function `typename std::binary_function<_TypeT, _TypeT, _TypeT>::result_type std::plus<_TypeT>::operator()(const typename std::binary_function<_TypeT, _TypeT, _TypeT>::first_argument_type&, const typename std::binary_function<_TypeT, _TypeT, _TypeT>::second_argument_type&) const [with _TypeT = Value]':
/amd/devco/sebor/stdcxx-4.1.3/include/algorithm:353: instantiated from `_OutputIter std::transform(_InputIter1, _InputIter1, _InputIter2, _OutputIter, _BinaryOperation) [with _InputIter1 = Value*, _InputIter2 = const Value*, _OutputIter = Value*, _BinaryOperation = std::plus<Value>]'
/amd/devco/sebor/stdcxx-4.1.3/include/valarray:389: instantiated from `std::valarray<_TypeT>& std::valarray<_TypeT>::operator+=(const std::valarray<_TypeT>&) [with _TypeT = Value]'
u.cpp:22: instantiated from here
/amd/devco/sebor/stdcxx-4.1.3/include/functional:57: error: no match for 'operator+' in '__x + __y'
/amd/devco/sebor/stdcxx-4.1.3/include/functional: In member function `typename std::binary_function<_TypeT, _TypeT, _TypeT>::result_type std::minus<_TypeT>::operator()(const typename std::binary_function<_TypeT, _TypeT, _TypeT>::first_argument_type&, const typename std::binary_function<_TypeT, _TypeT, _TypeT>::second_argument_type&) const [with _TypeT = Value]':
/amd/devco/sebor/stdcxx-4.1.3/include/algorithm:353: instantiated from `_OutputIter std::transform(_InputIter1, _InputIter1, _InputIter2, _OutputIter, _BinaryOperation) [with _InputIter1 = Value*, _InputIter2 = const Value*, _OutputIter = Value*, _BinaryOperation = std::minus<Value>]'
/amd/devco/sebor/stdcxx-4.1.3/include/valarray:402: instantiated from `std::valarray<_TypeT>& std::valarray<_TypeT>::operator-=(const std::valarray<_TypeT>&) [with _TypeT = Value]'
u.cpp:23: instantiated from here
/amd/devco/sebor/stdcxx-4.1.3/include/functional:70: error: no match for 'operator-' in '__x - __y'
/amd/devco/sebor/stdcxx-4.1.3/include/functional: In member function `typename std::binary_function<_TypeT, _TypeT, _TypeT>::result_type std::modulus<_TypeT>::operator()(const typename std::binary_function<_TypeT, _TypeT, _TypeT>::first_argument_type&, const typename std::binary_function<_TypeT, _TypeT, _TypeT>::second_argument_type&) const [with _TypeT = Value]':
/amd/devco/sebor/stdcxx-4.1.3/include/algorithm:353: instantiated from `_OutputIter std::transform(_InputIter1, _InputIter1, _InputIter2, _OutputIter, _BinaryOperation) [with _InputIter1 = Value*, _InputIter2 = const Value*, _OutputIter = Value*, _BinaryOperation = std::modulus<Value>]'
/amd/devco/sebor/stdcxx-4.1.3/include/valarray:415: instantiated from `std::valarray<_TypeT>& std::valarray<_TypeT>::operator%=(const std::valarray<_TypeT>&) [with _TypeT = Value]'
u.cpp:24: instantiated from here
/amd/devco/sebor/stdcxx-4.1.3/include/functional:109: error: no match for 'operator%' in '__x % __y'
/amd/devco/sebor/stdcxx-4.1.3/include/functional: In member function `typename std::binary_function<_TypeT, _TypeT, _TypeT>::result_type __rw::exclusive_or<_TypeT>::operator()(const typename std::binary_function<_TypeT, _TypeT, _TypeT>::first_argument_type&, const typename std::binary_function<_TypeT, _TypeT, _TypeT>::second_argument_type&) const [with _TypeT = Value]':
/amd/devco/sebor/stdcxx-4.1.3/include/algorithm:353: instantiated from `_OutputIter std::transform(_InputIter1, _InputIter1, _InputIter2, _OutputIter, _BinaryOperation) [with _InputIter1 = Value*, _InputIter2 = const Value*, _OutputIter = Value*, _BinaryOperation = __rw::exclusive_or<Value>]'
/amd/devco/sebor/stdcxx-4.1.3/include/valarray:428: instantiated from `std::valarray<_TypeT>& std::valarray<_TypeT>::operator^=(const std::valarray<_TypeT>&) [with _TypeT = Value]'
u.cpp:25: instantiated from here
/amd/devco/sebor/stdcxx-4.1.3/include/functional:732: error: no match for 'operator^' in '__x ^ __y'
/amd/devco/sebor/stdcxx-4.1.3/include/functional: In member function `typename std::binary_function<_TypeT, _TypeT, _TypeT>::result_type __rw::bitwise_and<_TypeT>::operator()(const typename std::binary_function<_TypeT, _TypeT, _TypeT>::first_argument_type&, const typename std::binary_function<_TypeT, _TypeT, _TypeT>::second_argument_type&) const [with _TypeT = Value]':
/amd/devco/sebor/stdcxx-4.1.3/include/algorithm:353: instantiated from `_OutputIter std::transform(_InputIter1, _InputIter1, _InputIter2, _OutputIter, _BinaryOperation) [with _InputIter1 = Value*, _InputIter2 = const Value*, _OutputIter = Value*, _BinaryOperation = __rw::bitwise_and<Value>]'
/amd/devco/sebor/stdcxx-4.1.3/include/valarray:441: instantiated from `std::valarray<_TypeT>& std::valarray<_TypeT>::operator&=(const std::valarray<_TypeT>&) [with _TypeT = Value]'
u.cpp:26: instantiated from here
/amd/devco/sebor/stdcxx-4.1.3/include/functional:719: error: no match for 'operator&' in '__x & __y'
/amd/devco/sebor/stdcxx-4.1.3/include/functional: In member function `typename std::binary_function<_TypeT, _TypeT, _TypeT>::result_type __rw::bitwise_or<_TypeT>::operator()(const typename std::binary_function<_TypeT, _TypeT, _TypeT>::first_argument_type&, const typename std::binary_function<_TypeT, _TypeT, _TypeT>::second_argument_type&) const [with _TypeT = Value]':
/amd/devco/sebor/stdcxx-4.1.3/include/algorithm:353: instantiated from `_OutputIter std::transform(_InputIter1, _InputIter1, _InputIter2, _OutputIter, _BinaryOperation) [with _InputIter1 = Value*, _InputIter2 = const Value*, _OutputIter = Value*, _BinaryOperation = __rw::bitwise_or<Value>]'
/amd/devco/sebor/stdcxx-4.1.3/include/valarray:454: instantiated from `std::valarray<_TypeT>& std::valarray<_TypeT>::operator|=(const std::valarray<_TypeT>&) [with _TypeT = Value]'
u.cpp:27: instantiated from here
/amd/devco/sebor/stdcxx-4.1.3/include/functional:706: error: no match for 'operator|' in '__x | __y'
/amd/devco/sebor/stdcxx-4.1.3/include/functional: In member function `typename std::binary_function<_TypeT, _TypeT, _TypeT>::result_type __rw::shift_left<_TypeT>::operator()(const typename std::binary_function<_TypeT, _TypeT, _TypeT>::first_argument_type&, const typename std::binary_function<_TypeT, _TypeT, _TypeT>::second_argument_type&) const [with _TypeT = Value]':
/amd/devco/sebor/stdcxx-4.1.3/include/algorithm:353: instantiated from `_OutputIter std::transform(_InputIter1, _InputIter1, _InputIter2, _OutputIter, _BinaryOperation) [with _InputIter1 = Value*, _InputIter2 = const Value*, _OutputIter = Value*, _BinaryOperation = __rw::shift_left<Value>]'
/amd/devco/sebor/stdcxx-4.1.3/include/valarray:467: instantiated from `std::valarray<_TypeT>& std::valarray<_TypeT>::operator<<=(const std::valarray<_TypeT>&) [with _TypeT = Value]'
u.cpp:28: instantiated from here
/amd/devco/sebor/stdcxx-4.1.3/include/functional:745: error: no match for 'operator<<' in '__x << __y'
/amd/devco/sebor/stdcxx-4.1.3/include/functional: In member function `typename std::binary_function<_TypeT, _TypeT, _TypeT>::result_type __rw::shift_right<_TypeT>::operator()(const typename std::binary_function<_TypeT, _TypeT, _TypeT>::first_argument_type&, const typename std::binary_function<_TypeT, _TypeT, _TypeT>::second_argument_type&) const [with _TypeT = Value]':
/amd/devco/sebor/stdcxx-4.1.3/include/algorithm:353: instantiated from `_OutputIter std::transform(_InputIter1, _InputIter1, _InputIter2, _OutputIter, _BinaryOperation) [with _InputIter1 = Value*, _InputIter2 = const Value*, _OutputIter = Value*, _BinaryOperation = __rw::shift_right<Value>]'
/amd/devco/sebor/stdcxx-4.1.3/include/valarray:480: instantiated from `std::valarray<_TypeT>& std::valarray<_TypeT>::operator>>=(const std::valarray<_TypeT>&) [with _TypeT = Value]'
u.cpp:29: instantiated from here
/amd/devco/sebor/stdcxx-4.1.3/include/functional:758: error: no match for 'operator>>' in '__x >> __y'
make: *** [u.o] Error 1



 All   Comments   Work Log   Change History   Subversion Commits      Sort Order: Ascending order - Click to sort in descending order
Repository Revision Date User Message
ASF #586808 Sat Oct 20 21:36:43 UTC 2007 sebor 2007-10-20 Martin Sebor <sebor@roguewave.com>

* 26.valarray.cassign.cpp (run_test): Disabled tests exercising
valarray specializations on a user-defined type for 4.2.0 and
prior since they are known to fail to compile due to STDCXX-512.
Files Changed
MODIFY /incubator/stdcxx/branches/4.2.x/tests/numerics/26.valarray.cassign.cpp

Repository Revision Date User Message
ASF #586809 Sat Oct 20 21:37:49 UTC 2007 sebor 2007-10-20 Martin Sebor <sebor@roguewave.com>

Merged rev 586808 from branches/stdcxx/4.2.x.
* 26.valarray.cassign.cpp (run_test): Disabled tests exercising
valarray specializations on a user-defined type for 4.2.0 and
prior since they are known to fail to compile due to STDCXX-512.
Files Changed
MODIFY /incubator/stdcxx/branches/4.2.0/tests/numerics/26.valarray.cassign.cpp

Repository Revision Date User Message
ASF #597417 Thu Nov 22 14:54:53 UTC 2007 faridz Merged r586808 and r597396 from branches/4.2.x

2007-10-20 Martin Sebor <sebor@roguewave.com>

* 26.valarray.cassign.cpp (run_test): Disabled tests exercising
valarray specializations on a user-defined type for 4.2.0 and
prior since they are known to fail to compile due to STDCXX-512.

2007-11-22 Farid Zaripov <farid_zaripov@epam.com>

* 26.valarray.cassign.cpp (run_test): Corrected condition in preprocessor directive.
Files Changed
MODIFY /incubator/stdcxx/trunk/tests/numerics/26.valarray.cassign.cpp

Repository Revision Date User Message
ASF #650706 Wed Apr 23 00:32:39 UTC 2008 sebor 2008-04-22 Martin Sebor <sebor@roguewave.com>

* test/numerics/26.valarray.cassign.cpp (run_test): Disabled tests
exercising valarray specializations on a user-defined type for 4.2.1
and prior since they are known to fail to compile due to STDCXX-512.
Files Changed
MODIFY /stdcxx/branches/4.2.x/tests/numerics/26.valarray.cassign.cpp

Repository Revision Date User Message
ASF #660567 Tue May 27 15:50:30 UTC 2008 sebor 2008-05-27 Martin Sebor <sebor@roguewave.com>

Merged revisions 656686, 650706, 653284, 650748, 650698, 657220,
652585, 653294, 653285, 654156, 653965, 659601, 653966, 652922,
654664, 657235, 652954, 654286, 659189, 659187, and 656767 from
branches/4.2.x.

2008-05-15 Eric Lemings <eric.lemings@roguewave.com>

STDCXX-871
* tests/src/printf.h: Remove documentation-only header.
* tests/include/rw_printf.h: Incorporate documentation comments
from deleted header.

2008-04-22 Martin Sebor <sebor@roguewave.com>

* test/numerics/26.valarray.cassign.cpp (run_test): Disabled tests
exercising valarray specializations on a user-defined type for 4.2.1
and prior since they are known to fail to compile due to STDCXX-512.

2008-05-04 Martin Sebor <sebor@roguewave.com>

STDCXX-910
* tests/src/locale.cpp (rw_localedef): Used __FILE__ to try to get
the value of TOPDIR when the environment variable is unset or empty.
(_rw_all_locales): Same.

2008-04-22 Martin Sebor <sebor@roguewave.com>

* tests/src/opt_diags.cpp (_rw_match_name): Asserted (obviously
holding) preconditions to shut up bogus HP aCC 6 warning 20200:
Potential null pointer dereference.

2008-04-22 Martin Sebor <sebor@roguewave.com>

STDCXX-754
* tests/src/cmdopt.cpp (rw_vsetopts): Handled malloc() failure.
Added an assertion to silence a bogus HP aCC 6/cadvise warning
#20200-D: Potential null pointer dereference. Unfortunately,
with the one gone another bogus one pops up...

2008-05-16 Travis Vitek <vitek@roguewave.com>

STDCXX-938
* tests/src/alarm.cpp [SIG_DFL]: Fix apparent typo in definition of
SIG_DFL which would have resulted in macro redefinition warnings if
both SIG_DFL and SIG_IGN were not defined in signal.h
(rw_sig_dfl): Change pointer constant to avoid crash when using
rw_alarm().
        (rw_sig_ign): Ditto.
(rw_sig_hold): Ditto.
(rw_sig_restore): Ditto.

2008-05-01 Travis Vitek <vitek@roguewave.com>

STDCXX-842
* tests/localization/22.locale.codecvt.out.cpp: Reserve space
for null terminator.

2008-05-04 Martin Sebor <sebor@roguewave.com>

Merged rev 653293 (fixing STDCXX-695 of which STDCXX-788 is a dupe)
from trunk.

2008-05-04 Martin Sebor <sebor@roguewave.com>

STDCXX-788
* 22.locale.num.put.cpp (do_test): Cast narrow character to unsigned
char before converting it to the generic charT to avoid potential sign
extension and to silence HP aCC 6 remark #4271-D: type conversion may
lose sign.
(long_test): Cast macro argument to unsigned type before shifting it
left to avoid an arithmetic overflow and to silence HP aCC 6 remark
#4300-D: Overflow while computing constant in left shift operation.

2008-05-04 Martin Sebor <sebor@roguewave.com>

* tests/localization/22.locale.time.put.cpp (do_test): Used casts
to safely convert a plain char argument to the generic charT before
passing it to the tested function to silence HP aCC remark #4271-D:
type conversion may lose sign.
(make_LC_TIME): Handled fopen() failure to silence warning #20200-D:
Potential null pointer dereference is detected.

2008-05-07 Travis Vitek <vitek@roguewave.com>

* tests/localization/22.locale.num.get.cpp: Reapply r644435 accidentally
reverted in r653965.

2008-05-06 Travis Vitek <vitek@roguewave.com>

* tests/localization/22.locale.num.get.cpp: Revert r657262
and apply a simpler fix.
(test_flt_uflow): Make val static to avoid cadvise warning.
(test_dbl_uflow): Ditto.
(test_ldbl_uflow): Ditto.

2008-05-23 Farid Zaripov <farid_zaripov@epam.com>

Merged r648347 from trunk

2008-04-15 Eric Lemings <eric.lemings@roguewave.com>
* tests/strings/21.cwctype.cpp: Misplaced #endif directive.

2008-05-06 Travis Vitek <vitek@roguewave.com>

* tests/algorithms/25.random.shuffle.cpp (test_random_shuffle): Break
from loop on first assertion failure.

2008-05-02 Martin Sebor <sebor@roguewave.com>

* etc/config/src/WCTYPE_T.cpp [EDG eccp]: Suppressed EDG eccp error
#450-D: the type "long long" is nonstandard when #including libc
headers.
* etc/config/src/WCTRANS_T.cpp: Same.
* etc/config/src/MBSTATE_T.cpp: Same.
* etc/config/src/WINT_T.cpp: Same.

2008-05-08 Martin Sebor <sebor@roguewave.com>

STDCXX-929
* etc/config/gcc.config: Unconditionally checked code generated
by the compiler to see if it's ILP32 or LP64.
[HP-UX] (CXXFLAGS.wide, LDFLAGS.wide, LDSOFLAGS.wide): Removed
assumption that -milp64 is the default on IPF.

2008-05-16 Martin Sebor <sebor@roguewave.com>

* etc/config/vacpp.config (use_tempinc): Corrected a typo introduced
in rev 652954, and removed the object file produced by compiling the
temporary source.

2008-05-02 Martin Sebor <sebor@roguewave.com>

* etc/config/vacpp.config (use_tempinc): Cd to TMPDIR before
invoking the compiler to avoid trying to write into the CWD
which may be read only.

2008-05-07 Martin Sebor <sebor@roguewave.com>

* examples/manual/failure.cpp (main): Demonstrated the (optional)
extensions, classes std::ios::badbit_set, std::ios::eofbit_set,
and std::ios::failbit_set.
* examples/manual/in/failure.in: Added "interesting" input file.
* examples/manual/out/failure.out: Set expected output.

2008-05-22 Martin Sebor <sebor@roguewave.com>

* bin/genxviews (process_results): Removed debugging output.

2008-05-22 Martin Sebor <sebor@roguewave.com>

* bin/genxviews: Added a column with the timestamp of the oldest
log and the number of new logs since the last run of the script.
Optimized away call to xbuildgen when no new logs have been added
since the last run of the script.

2008-05-15 Martin Sebor <sebor@roguewave.com>

* bin/genxviews: Changed the svn:keywords property to expand
all three of HeadURL, Id, and Revision.
* bin/xbuildgen: Same.
* bin/duration: Same.
Files Changed
MODIFY /stdcxx/branches/4.3.x/tests/localization/22.locale.num.get.cpp
MODIFY /stdcxx/branches/4.3.x/etc/config/src/WCTYPE_T.cpp
MODIFY /stdcxx/branches/4.3.x/tests/src/alarm.cpp
MODIFY /stdcxx/branches/4.3.x/bin/buildntest
ADD /stdcxx/branches/4.3.x/examples/manual/in/failure.in (from /stdcxx/branches/4.2.x/examples/manual/in/failure.in)
MODIFY /stdcxx/branches/4.3.x/tests/localization/22.locale.codecvt.out.cpp
MODIFY /stdcxx/branches/4.3.x/tests/localization/22.locale.time.put.cpp
MODIFY /stdcxx/branches/4.3.x/tests/numerics/26.valarray.cassign.cpp
MODIFY /stdcxx/branches/4.3.x/tests/include/rw_printf.h
MODIFY /stdcxx/branches/4.3.x/tests/src/opt_diags.cpp
MODIFY /stdcxx/branches/4.3.x/etc/config/gcc.config
MODIFY /stdcxx/branches/4.3.x/examples/manual/failure.cpp
MODIFY /stdcxx/branches/4.3.x/tests/src/cmdopt.cpp
MODIFY /stdcxx/branches/4.3.x/bin/genxviews
MODIFY /stdcxx/branches/4.3.x/tests/src/locale.cpp
MODIFY /stdcxx/branches/4.3.x/etc/config/src/WINT_T.cpp
MODIFY /stdcxx/branches/4.3.x/etc/config/src/WCTRANS_T.cpp
MODIFY /stdcxx/branches/4.3.x/etc/config/src/MBSTATE_T.cpp
MODIFY /stdcxx/branches/4.3.x/tests/strings/21.cwctype.cpp
MODIFY /stdcxx/branches/4.3.x/tests/localization/22.locale.num.put.cpp
MODIFY /stdcxx/branches/4.3.x/examples/manual/out/failure.out
MODIFY /stdcxx/branches/4.3.x/tests/algorithms/25.random.shuffle.cpp
MODIFY /stdcxx/branches/4.3.x/etc/config/vacpp.config