this question also stems from compiler error generated in microsoft visual studio 2005 sp1 and microsof visual studio 2008.
It compiles fine under cygwin and mingw.
template <typename T>
bool boost::pseudoprime(const T& n, const T& k)
{
typedef boost::operators<T> operatorT;
BOOST_STATIC_ASSERT(is_integral<T>::value || (is_base_of<operatorT, T>::value)); // mingw says its k, microsoft complains about it.
BOOST_ASSERT (n > T(2) && n % T(2) != 0);
return modular_expo(k, n-1, n) != T(1) % n ? true : false;
}
Just trying to get a compiler work around.
On 9/26/07, chun ping wang <cablepuff@gmail.com> wrote:
what i want to do is if type "T" happens to be a integeral type or a class type that inherits from boost::operators than let the function compile otherwise a compile time error appears. Basically T is any integeral type or any class type that derives from boost::operators.
On 9/26/07, David Abrahams <dave@boost-consulting.com
> wrote:
on Wed Sep 26 2007, "chun ping wang" <cablepuff-AT-gmail.com> wrote:
> template <typename T>
> bool boost::pseudoprime(const T& n, const T& k)
> {
> typedef boost::operators<T> operatorT;
> BOOST_STATIC_ASSERT(is_integral<T>::value); // static assert 1.
> BOOST_STATIC_ASSERT((is_base_of<operatorT, T>::value)); // static assert 2.
> BOOST_ASSERT (n > T(2) && n % T(2) != 0);
> return modular_expo(k, n-1, n) != T(1) % n ? true : false;
> }
>
> now in vistual studio 2005 sp1 and visual studio 2008 beta the part "is_base_of<operatorT,
> T>::value" does not work if T happens to be an int or long due to "error C2803: 'operator --'
> must have at least one formal parameter of class type". I want to use enable_if to enable the
> STATIC_ASSERT only if T is NOT an arithmetic type for static assert 2.
enable_if can't "enable static asserts" in any sense that I
understand. What are you really trying to do? Try to describe it
without mentioning enable_if or STATIC_ASSERT. Just talk about the
behavior you want.
--
Dave Abrahams
Boost Consulting
http://www.boost-consulting.com
The Astoria Seminar ==> http://www.astoriaseminar.com
_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users