-
-
Notifications
You must be signed in to change notification settings - Fork 671
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ImageScanlineConstIterator not working with RLEImage module in ITK 5.4 rc02 #4537
Comments
Thank you for contributing an issue! 🙏 Welcome to the ITK community! 🤗👋☀️ We are glad you are here and appreciate your contribution. Please keep in mind our community participation guidelines. 📜 This is an automatic message. Allow for time for the ITK community to be able to read the issue and comment on it. |
Hi, Thank you for the reproducible example. Conceptually, extra work is required to make RLEImage (run-length-encoded) Image with ImageScanlineIterator. |
Also, all the filters which use |
Thanks for replying! It used to work without problem in ITK 5.3 and before. Is there any example of the extra works needed to make it work for 5.4? |
I was about to suggest implementing a specialization of You might only need to |
Also, the error messages are pointing to this line: |
I just tried this on Linux with ITK f853303, and it compiles without issue. Both |
Can you try compiling with ITK master? |
Still the same error for the master branch. I'll test on Windows and Linux. But making it work for Mac is also important for us. |
Do I understand correctly that the problem only occurs on Mac? It looks like your https://github.com/jilei-hao/RLETest/tree/main compiles well on my Windows pc. Anyway, looking at https://github.com/KitwareMedical/ITKRLEImage/blob/a3bdf29f046693dce0d6c1bc4be190e87a36e4b6/include/itkRLEImageScanlineConstIterator.h#L71 , would it possibly help if you locally replace
with
? I'm not sure, but it might make it easier for the compiler to deduce the template arguments 🤷 |
What are the recommended compilers for itk5.4 on MacOS? It looks more like an apple compiler issue. I'm getting more issue from apple clang 14.0 on an arm machine. I can't even build ITK 5.4 with |
@jilei-hao I'm sorry to hear so! Do you just get more of those errors on deduction of template arguments? Or also other kinds of errors? These are the compilers that ITK aims to support: https://github.com/InsightSoftwareConsortium/ITK/blob/1780a31476d63a3f67b97c50037bf8880224f3b9/Documentation/docs/supported_compilers.md |
@N-Dekker Thanks for the list!
|
Do all those errors specifically occur when trying to use those iterators with RLEImage? And does the adjustment that I suggested at #4537 (comment) fix any of those errors at all? |
Just tried but it did not fix the issue. |
Same issue also occurs for llvm clang 17.0.6 |
@thewtex has an ARM Mac, he might be able to help, assuming he can spare the time. |
@jilei-hao Can you please try the same adjustment to both So also in the "non-const" itkRLEImageScanlineIterator.h, at https://github.com/KitwareMedical/ITKRLEImage/blob/a3bdf29f046693dce0d6c1bc4be190e87a36e4b6/include/itkRLEImageScanlineIterator.h#L59 Replace:
with:
Just like you did in the "const" version, at https://github.com/KitwareMedical/ITKRLEImage/blob/a3bdf29f046693dce0d6c1bc4be190e87a36e4b6/include/itkRLEImageScanlineConstIterator.h#L71 Does that fix any of the compiler errors? If that doesn't work, I think we need to add "deduction guides" to itkRLEImageScanlineIterator.h and itkRLEImageScanlineConstIterator.h |
Thanks for the suggestion! But still got the same error.
…On Sat, Mar 30, 2024 at 2:08 PM Niels Dekker ***@***.***> wrote:
@jilei-hao <https://github.com/jilei-hao> Can you please try the same
adjustment to both ImageScanlineConstIterator *and* ImageScanlineIterator,
as I suggested at #4537 (comment)
<#4537 (comment)>
So also in the "non-const" itkRLEImageScanlineIterator.h, at
https://github.com/KitwareMedical/ITKRLEImage/blob/a3bdf29f046693dce0d6c1bc4be190e87a36e4b6/include/itkRLEImageScanlineIterator.h#L59
Replace:
ImageScanlineIterator(ImageType * ptr, const RegionType & region)
with:
ImageScanlineIterator(const RLEImage<TPixel, VImageDimension, CounterType> * ptr,
const ImageRegion<VImageDimension> & region)
Just like you did in the "const" version, at
https://github.com/KitwareMedical/ITKRLEImage/blob/a3bdf29f046693dce0d6c1bc4be190e87a36e4b6/include/itkRLEImageScanlineConstIterator.h#L71
Does that fix any of the compiler errors?
If that doesn't work, I think we need to add "deduction guides" to
itkRLEImageScanlineIterator.h and itkRLEImageScanlineConstIterator.h
—
Reply to this email directly, view it on GitHub
<#4537 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/ARDT6PSBBMWGUNYLGXYTAXDY23WSFAVCNFSM6AAAAABFKB5TBSVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDAMRYGQYDGOJZGE>
.
You are receiving this because you were mentioned.Message ID:
***@***.***>
|
With: ❯ c++ --version Apple clang version 15.0.0 (clang-1500.3.9.4) Target: arm64-apple-darwin23.3.0 Thread model: posix InstalledDir: /Library/Developer/CommandLineTools/usr/bin Addresses: ``` /Users/matt.mccormick/src/RLETest/RLEIteratorTest.cxx:15:35: error: no viable constructor or deduction guide for deduction of template arguments of 'ImageScanlineConstIterator' itk::ImageScanlineConstIterator it2(constRLE, constRLE->GetLargestPossibleRegion()); ^ /Users/matt.mccormick/src/ITK/Modules/Core/Common/include/itkImageScanlineConstIterator.h:106:3: note: candidate template ignored: substitution failure [with TImage = itk::RLEImage<short>]: cannot reference member of primary template because deduced class template specialization 'ImageScanlineConstIterator<itk::RLEImage<short, 3, unsigned short>>' is instantiated from a partial specialization ImageScanlineConstIterator(const TImage * ptr, const RegionType & region) ^ ~~~~~~~~~~ /Users/matt.mccormick/src/ITK/Modules/Core/Common/include/itkImageScanlineConstIterator.h:267:1: note: candidate template ignored: could not match 'SmartPointer<TImage>' against 'const itk::RLEImage<short, 3> *' ImageScanlineConstIterator(SmartPointer<TImage>, const typename TImage::RegionType &) ^ /Users/matt.mccormick/src/ITK/Modules/Core/Common/include/itkImageScanlineConstIterator.h:119:3: note: candidate function template not viable: requires single argument 'it', but 2 arguments were provided ImageScanlineConstIterator(const ImageIterator<TImage> & it) ^ /Users/matt.mccormick/src/ITK/Modules/Core/Common/include/itkImageScanlineConstIterator.h:135:3: note: candidate function template not viable: requires single argument 'it', but 2 arguments were provided ImageScanlineConstIterator(const ImageConstIterator<TImage> & it) ^ /Users/matt.mccormick/src/ITK/Modules/Core/Common/include/itkImageScanlineConstIterator.h:64:27: note: candidate function template not viable: requires 1 argument, but 2 were provided class ITK_TEMPLATE_EXPORT ImageScanlineConstIterator : public ImageConstIterator<TImage> ^ /Users/matt.mccormick/src/ITK/Modules/Core/Common/include/itkImageScanlineConstIterator.h:97:3: note: candidate function template not viable: requires 0 arguments, but 2 were provided ImageScanlineConstIterator() ^ ``` Closes InsightSoftwareConsortium#4537.
@jilei-hao thanks for the reproducible test case. Addressed in #4553. To make the RLEIteratorTest.cxx compile, a similar fix has to be applied. |
With: ❯ c++ --version Apple clang version 15.0.0 (clang-1500.3.9.4) Target: arm64-apple-darwin23.3.0 Thread model: posix InstalledDir: /Library/Developer/CommandLineTools/usr/bin Addresses: ``` /Users/matt.mccormick/src/RLETest/RLEIteratorTest.cxx:15:35: error: no viable constructor or deduction guide for deduction of template arguments of 'ImageScanlineConstIterator' itk::ImageScanlineConstIterator it2(constRLE, constRLE->GetLargestPossibleRegion()); ^ /Users/matt.mccormick/src/ITK/Modules/Core/Common/include/itkImageScanlineConstIterator.h:106:3: note: candidate template ignored: substitution failure [with TImage = itk::RLEImage<short>]: cannot reference member of primary template because deduced class template specialization 'ImageScanlineConstIterator<itk::RLEImage<short, 3, unsigned short>>' is instantiated from a partial specialization ImageScanlineConstIterator(const TImage * ptr, const RegionType & region) ^ ~~~~~~~~~~ /Users/matt.mccormick/src/ITK/Modules/Core/Common/include/itkImageScanlineConstIterator.h:267:1: note: candidate template ignored: could not match 'SmartPointer<TImage>' against 'const itk::RLEImage<short, 3> *' ImageScanlineConstIterator(SmartPointer<TImage>, const typename TImage::RegionType &) ^ /Users/matt.mccormick/src/ITK/Modules/Core/Common/include/itkImageScanlineConstIterator.h:119:3: note: candidate function template not viable: requires single argument 'it', but 2 arguments were provided ImageScanlineConstIterator(const ImageIterator<TImage> & it) ^ /Users/matt.mccormick/src/ITK/Modules/Core/Common/include/itkImageScanlineConstIterator.h:135:3: note: candidate function template not viable: requires single argument 'it', but 2 arguments were provided ImageScanlineConstIterator(const ImageConstIterator<TImage> & it) ^ /Users/matt.mccormick/src/ITK/Modules/Core/Common/include/itkImageScanlineConstIterator.h:64:27: note: candidate function template not viable: requires 1 argument, but 2 were provided class ITK_TEMPLATE_EXPORT ImageScanlineConstIterator : public ImageConstIterator<TImage> ^ /Users/matt.mccormick/src/ITK/Modules/Core/Common/include/itkImageScanlineConstIterator.h:97:3: note: candidate function template not viable: requires 0 arguments, but 2 were provided ImageScanlineConstIterator() ^ ``` Closes InsightSoftwareConsortium#4537.
Great! Thanks everyone for the help! |
Just trying to reproduce the problem online: https://godbolt.org/z/3zMceGezo But it still compiles at godbolt.org! 🤷 |
This addresses InsightSoftwareConsortium/ITK#4537 In addition to SmartPointer arguments, we need a raw const pointer version. Suggested-by: Niels Dekker <N.Dekker@lumc.nl>
This addresses InsightSoftwareConsortium/ITK#4537 In addition to SmartPointer arguments, we need a raw const pointer version. Suggested-by: Niels Dekker <N.Dekker@lumc.nl>
This addresses InsightSoftwareConsortium/ITK#4537 In addition to SmartPointer arguments, we need a raw const pointer version. Suggested-by: Niels Dekker <N.Dekker@lumc.nl>
This addresses InsightSoftwareConsortium/ITK#4537 In addition to SmartPointer arguments, we need a raw const pointer version. Suggested-by: Niels Dekker <N.Dekker@lumc.nl>
Hi @N-Dekker , I copied this code to my local and compiled it and got:
Am I missing any configuration in my compiler or cmake settings? |
@jilei-hao Thanks for trying the code that I put at https://godbolt.org/z/3zMceGezo ! Clearly that code does not (yet) reproduce the issue you found, even though I tried to make it similar! You're getting a link error, which is fine, because the errors that you reported should have appeared before linking, during the compilation phase. It would be really interesting to know when such errors do and do not occur. We need it in order to know how to properly use class template argument deduction (CTAD). So it would be helpful if you or anyone is able to reproduce those compile errors at https://godbolt.org Possibly by doing some adjustments to https://godbolt.org/z/3zMceGezo |
This addresses InsightSoftwareConsortium/ITK#4537 In addition to SmartPointer arguments, we need a raw const pointer version. Suggested-by: Niels Dekker <N.Dekker@lumc.nl>
Closing this issue since it has been addressed by KitwareMedical/ITKRLEImage#63 |
Description
Compile time error thrown when using
itkRLEImage
with filters such asBinaryThresholdImageFilter
. It was complaining about "no viable constructor or deduction guide for deduction of template arguments of ‘ImageScanlineConstIterator’"Steps to Reproduce
https://github.com/jilei-hao/RLETest/tree/main
Expected behavior
Code compiles without error.
Actual behavior
When compiling target
RLEImageTest
When compiling target
RLEIteratorTest
Reproducibility
100%
Versions
ITK 5.4-rc02 with Module_RLEImage=ON
Environment
MacOS 12.7.4, Apple Clang 14.0.0, CMake 3.25.2
Additional Information
The text was updated successfully, but these errors were encountered: