Whole Tomato Software Forums
Whole Tomato Software Forums
Main Site | Profile | Register | Active Topics | Members | Search | FAQ
 All Forums
 Visual Assist
 Technical Support
 Find reference failed.

You must be registered to post a reply.
Click here to register.

Screensize:
UserName:
Password:
Format: BoldItalicizeUnderlineStrikethrough Align leftCenterAlign right Insert horizontal ruleUpload and insert imageInsert hyperlinkInsert email addressInsert codeInsert quoted textInsert listInsert Emoji
   
Message:

Forum code is on.
Html is off.

 
Check to subscribe to this topic.
   

T O P I C    R E V I E W
superzmy Posted - Dec 22 2024 : 9:34:55 PM
struct StructA {};
class X
{
public:
template<bool B>
auto Foo1() const noexcept -> bool
{
return 1;
}

template<bool B>
auto Foo2(StructA * a) const noexcept -> bool
{
return 1;
}
};

void A()
{
X x;
X * pX = new X{};
pX->template Foo1<true>(); //1
pX->Foo1<true>(); //2

StructA * a = nullptr;
(&x)->template Foo2<true>(a); //3
((X *) &x)->Foo2<true>(a); //4
}
-----
Move input cursor to Foo1 or Foo2 (1/2/3/4) and test ctrl-shift-f (find reference).
and only //2 will find success.
7   L A T E S T    R E P L I E S    (Newest First)
feline Posted - Feb 21 2025 : 06:56:14 AM
I agree and accept that this is a bug, and I have already put in the bug report for this.

But, if the template keyword is necessary then we have a bug that a lot of people who work on cross platform code are guaranteed to encounter. If the template keyword is optional then we have a more limited bug that is likely to effect a smaller number of people. Which is why I wanted to check this, since this is an important distinction, and can help us when prioritising the outstanding bugs.

I hope this makes sense and explains my thinking here.
superzmy Posted - Feb 20 2025 : 10:28:23 PM
You shouldn't debate whether the template is necessary. As long as the compiler accepts the template as valid syntax, vax should support it.
------
template<typename TA1>
struct B
{
template<int>
static void F1(int)
{}
};

template<typename TA1>
struct D : B<TA1>
{
template<typename TA2>
static void call()
{
B<TA1>::template F1<1>(1); // <- this "template" is required in gcc
}
};

int main()
{
D<int>::call<int>();
}
feline Posted - Feb 14 2025 : 08:39:20 AM
"gcc -lstdc++" does not work for me, I still get the error about "operator new".

"g++" is working for me. Using "g++" under Windows, version 14.2.0, the following code file compiles without any errors or warnings:

#include <iostream>
	
int main()
{
	std::cout << "Hello World!\n";
}
	
struct StructA {};
	
class testClassHoldingTemplateFunctions
{
public:
	static void SimpleMemberFunc() {}
	
	template<bool B>
	static bool SimpleTemplateFunc(StructA *a) { return true; }
};
	
void TestFindReferencesTemplateMememberFunctions()
{
	testClassHoldingTemplateFunctions * pX = new testClassHoldingTemplateFunctions{};
	StructA * a = nullptr;
	pX->SimpleTemplateFunc<true>(a); // calling static member without template keyword
	pX->template SimpleTemplateFunc<true>(a); // calling static member with template keyword
}



The same code compiles quite happily using the godbolt.org link you posted as well.

In both cases, I have added some invalid code, to make sure the compiler does throw an error on obviously invalid code.

So far I cannot reproduce the need for the template keyword. I have made sure I am calling a static template member function.
superzmy Posted - Feb 13 2025 : 9:53:31 PM
quote:
Originally posted by feline

That would certainly explain the odd looking code.

Just trying to reproduce this here, to confirm it. I have installed MinGW gcc version 14.2.0 under Windows 10, and with the command:

gcc cppConsoleGccTest.cpp

I cannot get even a very simple test case to compile, due to:

undefined reference to `operator new(unsigned long long)'

one online answer says that gcc doesn't compile C++ code.


Even you compile in linux, the command is not well.
g++ a.cpp
gcc -lstdc++

and you should use https://godbolt.org/ to test any code cross platform and compiler
feline Posted - Feb 10 2025 : 09:43:40 AM
That would certainly explain the odd looking code.

Just trying to reproduce this here, to confirm it. I have installed MinGW gcc version 14.2.0 under Windows 10, and with the command:

gcc cppConsoleGccTest.cpp

I cannot get even a very simple test case to compile, due to:

undefined reference to `operator new(unsigned long long)'

one online answer says that gcc doesn't compile C++ code.
superzmy Posted - Feb 08 2025 : 12:13:59 PM
gcc require to write XXX::template F<YYY>() to call static functions.
but write XXX::F<YYY>() is ok to windows VS compile and VAX find referrence.
Can I see this feature fix before I die ? Perhaps it just needs vax to ignore "template".
feline Posted - Dec 23 2024 : 12:46:03 PM
Thank you for the clear sample code, I am seeing the same problems here. I have put in a bug report for this:

case=165345

If you run Find References on 1 or 2, and right click with the mouse in the Find References Results window, if you make sure "Display unknown/guess hits" is turned On, VA will list 3 and 4, since it recognises that the function name is used here, even though it isn't understanding the code properly. Not ideal, but perhaps helpful.

© 2023 Whole Tomato Software, LLC Go To Top Of Page
Snitz Forums 2000