[Issue 1661] Not possible to specialize on template with integer parameter

d-bugmail at puremagic.com d-bugmail at puremagic.com
Thu Feb 21 00:26:48 PST 2008


http://d.puremagic.com/issues/show_bug.cgi?id=1661


wbaxter at gmail.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|RESOLVED                    |REOPENED
         Resolution|DUPLICATE                   |




------- Comment #5 from wbaxter at gmail.com  2008-02-21 02:26 -------
I seem to have been wrong in using function templates.  C++ can't do that
either.  I think I must have thought it was simpler to demonstrate with
functions when I tried to distill a test case from the original C++ to D.  But
it does work with structs in C++, intractible or not.

Working C++ (save to specialize.cpp and compile with "dmc specialize.cpp"):

#include <stdio.h>

template <int N>
struct Number {
    static const int value = N;
};

template <typename T>
struct test_specialize 
{
    void talk() { printf("Not so special:\n"); }
};

template<int N>
struct test_specialize<Number<N> > 
{
    void talk() { printf("Ooh special - NUMBER N\n"); }
};

int main(int argc, char* argv[])
{
    test_specialize< Number<5> > x;
    x.talk();
    return 0;
}

-----

Not working D:

module specialize;
import std.stdio;

struct Number(int N) 
{
    const int value = N;
}

struct test_specialize(T)
{
    void talk() { writefln("Not so special:\n"); }
}

struct test_specialize(T : Number!(N))
{
    void talk() { writefln("Ooh special - NUMBER N\n"); }
}

int main()
{
    test_specialize!(Number!(5)) x;
    x.talk();
    return 0;
}

---

The C++ version outputs "ooh special", and the d version "Not so special".


-- 



More information about the Digitalmars-d-bugs mailing list