User is not allowed to provide a NULL constraint to the various ARG
constructors. This patch makes sure the Constraint is not NULL before
dereferencing and raises a logic_error if it is NULL.
Also included the two new tests test88 and test89 in runtests script.
The various getValue functions should not modify the underlying class,
so they have been turned into const. The only exception is ValueArg
where a non-const version is kept for backward compatibility (it
should be removed if we allow an API break). The other instances are
safe since the return value is not changed and the new function
signature is less restrictive.
Make all types have ValueLike traits by default.
This allows new types to be added without any fuzz (no need to specify
the traits) if it has operator>>. It also removes the need to manually
specify the ArgTrait for all built in types (such as long, bool, char,
float etc).
ArgTraits now works in the following way:
1) If there exists a specialization of ArgTraits for type X, use it.
2) If no specialization exists but X has the typename
X::ValueCategory, use the specialization for X::ValueCategory.
3) If neither (1) nor (2) defines the trait, use the default which is
ValueLike.
Conflicts:
examples/Makefile.am
examples/test24.cpp
tests/Makefile.am
tests/runtests.sh
tests/test83.out
tests/test83.sh
This allows new types to be added without any fuzz (no need to specify
the traits) if it has operator>>. It also removes the need to manually
specify the ArgTrait for all built in types (such as long, bool, char,
float etc).
ArgTraits now works in the following way:
1) If there exists a specialization of ArgTraits for type X, use it.
2) If no specialization exists but X has the typename
X::ValueCategory, use the specialization for X::ValueCategory.
3) If neither (1) nor (2) defines the trait, use the default which is
ValueLike.