Thanks for clarifying.

In your example, there are three templates named g_print.
In particular, the types/interfaces of these three templates do
not have to be the instantiation of one general type/interface.

In ATS, we have one g_print:

fun<a:type> g_print(x: a): void

And then three implementations:

impltmp g_print<int> = ...
impltmp g_print<string> = ...
impltmp{a:type} g_print<list(a)> = ...

This subtle difference affects how type-checking is performed.

In C++, template instantiation/resolution is done first and then
type-checking is performed on the result
of instantiation/resolution.

In ATS, ML-like algebraic type-checking is done before template resolution.
And linear and dependent
type-checking on the result of template resolution is planned to be done
after.


On Fri, Jul 3, 2020 at 7:55 AM Chris Double <chris.dou...@double.co.nz>
wrote:

> On Fri, Jul 3, 2020 at 6:46 PM gmhwxi <gmh...@gmail.com> wrote:
> >
> > Did I miss something about C++ templates? It seems that the template
> parameters
> > of a template implementation in C++ must be variables.
>
> I think this C++ example does what you are trying, unless I'm
> misunderstanding the ATS code:
>
> --------------------------8<----------------------
> #include <iostream>
> #include <list>
>
> template <class T> void g_print(T const& x) {
>         std::cout << "case 1" << std::endl;
> }
>
> template <> void g_print(int const& x) {
>         std::cout << "case 2" << std::endl;
> }
>
> template <class T> void g_print(std::list<T> const& x) {
>         std:: cout << "case 3" << std::endl;
> }
>
> int main() {
>         g_print("hello");
>         g_print(5);
>         std::list<int> l;
>         g_print(l);
>         return 0;
> }
> --------------------------8<----------------------
>
> It prints out:
>
> case 1
> case 2
> case 3
>
> Chris.
> --
> https://bluishcoder.co.nz
>
> --
> You received this message because you are subscribed to the Google Groups
> "ats-lang-users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to ats-lang-users+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/ats-lang-users/CALn1vHEpfccad3EydBsRjLsoxWo%3DgBgUGQVfD-naT9BYqTeqOQ%40mail.gmail.com
> .
>

-- 
You received this message because you are subscribed to the Google Groups 
"ats-lang-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to ats-lang-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ats-lang-users/CAPPSPLpBhXx%3DvaySfrkZSuoF4KfS5zL--sjzgEMX59UkCVczqQ%40mail.gmail.com.

Reply via email to